Javascript:检查对象数组中是否存在键

时间:2015-09-21 08:45:49

标签: javascript node.js lodash

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。

有没有更好的方法来编写代码片段? 我觉得很笨拙。

4 个答案:

答案 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;

x已经是布尔值,或者至少是truthy / falsy值。

如果你需要确定返回的值是一个布尔值,只需强制它为一个:

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);