正在测试数组对象的值



如果我有一个数组,比如:

[
{ "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');

希望它能帮助

最新更新