如果我有一个数组,比如:
[
{ "user": "tom",
"email": "ee@co.com"
},
{ "user": "james",
"email": "bb@co.com"
},
{ "user": "ryan",
"email": "rr@co.com"
}
]
但它并不总是按这个顺序返回——例如,我如何检查ryan
是否存在于其中一个对象中?
如果你已经在使用lodash(或想使用(,那么我会使用它的find:
_.find(array, { user: "ryan" })
或者再加几个字符,你就可以不用lodash:了
array.find(elem => elem.user === "ryan")
如果没有找到匹配的元素,则两者都返回undefined
。
如果数组包含ryan
,则函数返回true。
var input = [
{ "user": "tom",
"email": "ee@co.com"
},
{ "user": "james",
"email": "bb@co.com"
},
{ "user": "ryan",
"email": "rr@co.com"
}
]
var output = input.some(function(eachRow){
return eachRow.user === 'ryan';
});
console.log(output);
我的解决方法是将目标字段提取到数组中,然后检查值。
const chai = require('chai');
const expect = chai.expect;
describe('unit test', function() {
it('runs test', function() {
const users = [
{ "user": "tom",
"email": "ee@co.com"
},
{ "user": "james",
"email": "bb@co.com"
},
{ "user": "ryan",
"email": "ryan@co.com"
}
];
const names = extractField(users, 'user'); // ['tom', 'james', 'ryan']
expect(names).to.include('ryan');
});
function extractField(users, fieldName) {
return users.map(user => user[fieldName]);
}
});
我用柴来断言。如果您想签入其他字段,我们只使用提取方法。
const emails = extractField(users, 'email');
expect(emails).to.include('ryan');
希望它能帮助