var _ = require('lodash');
var users = [
{ 'id': '1', 'coins': false },
{ 'id': '2', 'coins': false }
];
var a = _.every(users, function(p){
if ('id' in p && 'coins' in p)
return true;
else
return false;
});
console.log(a);
该函数用于检入对象数组中存在的键。 如果其中一个对象不存在" id"或者"硬币" ,它返回false。
有没有更好的方法来编写代码片段? 我觉得很笨拙。
答案 0 :(得分:2)
至少,替换:
if ('id' in p && 'coins' in p)
return true;
else
return false;
使用:
return 'id' in p && 'coins' in p;
基本上, 从不 使用如下构造:
if (x)
return true;
else
return false;
如果你需要确定返回的值是一个布尔值,只需强制它为一个:
return !!('id' in p && 'coins' in p);
另外,正如其他答案所述,lodash在这里是多余的。你可以使用JS的本地[every][3]
替换:
_.every(users, function(p){
使用:
users.every(function(p){
答案 1 :(得分:2)
由于你在node.js中,你知道你已经有v1 <- c(7, 19.48)
所以我在这里或array.every()
没有看到任何理由。为什么不:
if/else
仅供参考,此代码假设没有人神秘地向Object.prototype添加名为var users = [
{ 'id': '1', 'coins': false },
{ 'id': '2', 'coins': false }
];
var allValid = users.every(function(item) {
return 'id' in item && 'coins' in item;
});
或id
的属性(这似乎是一个安全的假设)。如果您想要防止这种情况发生,可以使用coins
代替item.hasOwnProperty('id')
。
答案 2 :(得分:0)
您可以使用_.has()
检查对象属性是否存在:
function checkValidity(array, listOfKeys) {
return _.every(array, function (item) {
return _.every(listOfKeys, function (key) {
return _.has(item, key);
});
});
}
用法:
checkValidity(users, ['id', 'coins']);
答案 3 :(得分:0)
我会使用[Array.prototype.some()] [1]函数:
var users = [
{ 'id': '1', 'coins': false },
{ 'id': '2', 'coins': false }
];
var result = users.some(e => e.hasOwnProperty('id') && e.hasOwnProperty('coins'));
console.log("The array contains an object with a 'name' and 'quantity' property: " + result);