簡體   English   中英

Javascript:檢查鍵是否存在於對象數組中

[英]Javascript: Check whether key exists in an array of objects

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屬性添加到Object.prototype(在這里似乎是一個安全的假設)。 如果您想防止這種情況,可以使用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已經是一個布爾值,或者至少是一個true / falsy值。

如果需要確保返回的值是布爾值,只需將其強制為一個即可:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM