检查key是否存在于对象数组中

Javascript: Check whether key exists in an array of objects

本文关键字:对象 数组 key 是否 存在 于对象 检查      更新时间:2023-09-26
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"或"coins",则返回false。

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

因为你是在node.js中,你知道你已经有了array.every(),所以我不认为这里有任何理由使用lodash或if/else

var users = [
  { 'id': '1', 'coins': false },
  { 'id': '2', 'coins': false }
];
var allValid = users.every(function(item) {
    return 'id' in item && 'coins' in item;
});

仅供参考,此代码假设没有人神秘地向对象添加名为idcoins的属性。原型(这似乎是一个安全的假设)。如果你想防止这种情况,你可以使用item.hasOwnProperty('id')而不是in

至少,替换:

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已经是一个布尔值,或者至少是一个真/假值。

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

return !!('id' in p && 'coins' in p);

同样,正如在另一个答案中提到的,lodash在这里是多余的。你可以使用JS的原生[every][3]
替换:

_.every(users, function(p){

:

users.every(function(p){

您可以使用_.has()来检查对象属性是否存在:

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

用法:

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

我将使用[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);