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

Javascript:检查对象数组中是否存在键,javascript,node.js,lodash,Javascript,Node.js,Lodash,该函数用于检入对象数组中存在的键。 如果其中一个对象不存在“id”或“coins”,则返回false 有没有更好的方法来编写这段代码? 我觉得很笨拙。至少,替换: var _ = require('lodash'); var users = [ { 'id': '1', 'coins': false }, { 'id': '2', 'coins': false } ]; var a = _.every(users, function(p){ if ('id' in p &

该函数用于检入对象数组中存在的键。 如果其中一个对象不存在“id”或“coins”,则返回false

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

至少,替换:

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

基本上,从不使用如下结构:

return 'id' in p && 'coins' in p;
x
已经是布尔值,或者至少是/值

如果需要确保返回值是布尔值,只需将其强制为1:

if (x)
    return true;
else
    return false;

另外,正如在另一个答案中提到的,在这里,lodash是多余的。您可以使用JS的本机
[every][3]

替换:

与:


至少,替换:

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

基本上,从不使用如下结构:

return 'id' in p && 'coins' in p;
x
已经是布尔值,或者至少是/值

如果需要确保返回值是布尔值,只需将其强制为1:

if (x)
    return true;
else
    return false;

另外,正如在另一个答案中提到的,在这里,lodash是多余的。您可以使用JS的本机
[every][3]

替换:

与:


由于您在node.js中,您知道您已经有了
array.every()
,所以我看不出有任何理由在这里使用lodash或
if/else
。为什么不这样做:

users.every(function(p){

仅供参考,此代码假设没有人神秘地将名为
id
coins
的属性添加到Object.prototype(这里似乎是一个安全的假设)。如果您想防止这种情况发生,可以使用
item.hasOwnProperty('id')
而不是
中的

因为您在node.js中,您知道您已经有了
array.every()
,所以我看不到任何理由在这里使用lodash或
If/else
。为什么不这样做:

users.every(function(p){
仅供参考,此代码假设没有人神秘地将名为
id
coins
的属性添加到Object.prototype(这里似乎是一个安全的假设)。如果您想防止出现这种情况,可以使用
item.hasOwnProperty('id')
而不是
中的
,检查对象属性是否存在:

var users = [
  { 'id': '1', 'coins': false },
  { 'id': '2', 'coins': false }
];

var allValid = users.every(function(item) {
    return 'id' in item && 'coins' in item;
});
用法:

function checkValidity(array, listOfKeys) {
    return _.every(array, function (item) {
        return _.every(listOfKeys, function (key) {
            return _.has(item, key);
        });
    });
}
您可以使用检查对象属性是否存在:

var users = [
  { 'id': '1', 'coins': false },
  { 'id': '2', 'coins': false }
];

var allValid = users.every(function(item) {
    return 'id' in item && 'coins' in item;
});
用法:

function checkValidity(array, listOfKeys) {
    return _.every(array, function (item) {
        return _.every(listOfKeys, function (key) {
            return _.has(item, key);
        });
    });
}

我将使用[Array.prototype.some()][1]函数:

checkValidity(users, ['id', 'coins']);

我将使用[Array.prototype.some()][1]函数:

checkValidity(users, ['id', 'coins']);

嗯,
x
不一定是布尔值。。。在这种特殊情况下是这样的,但并不总是如此。您不需要
这里。
中的
操作符已经返回了一个布尔值。@jfriend00:我刚刚添加了这一点,作为一种解释,总是替换这样的if语句有时会导致意外的响应。返回true/false,是关于
if(x)
测试的注释不正确。嗯,
x
不一定是布尔值。。。在这种特殊情况下是这样的,但并不总是如此。您不需要
这里。
中的
运算符已经返回了一个布尔值。@jfriend00:我刚刚添加了这一点,作为一种解释,总是替换这样的if语句有时会导致意外的响应。该运算符返回true/false,这是关于
if(x)
测试的注释不正确。@RobG-我将添加该警告,但是这些都是文字,所以这里似乎没有必要使用
.hasOwnProperty()
。非常感谢您的解释@RobG-我将补充这一警告,但这些是文字,因此
.hasOwnProperty()
在这里似乎没有必要。非常感谢您的解释!