[英]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;
});
僅供參考,此代碼假定沒有人神秘地將名為id
或coins
屬性添加到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.