Javascript:检查对象数组中是否存在键
该函数用于检入对象数组中存在的键。 如果其中一个对象不存在“id”或“coins”,则返回false 有没有更好的方法来编写这段代码?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 &
我觉得很笨拙。至少,替换:
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()
在这里似乎没有必要。非常感谢您的解释!