我有一个对象数组,我试图循环并检查一个公共密钥,如果它存在于所有对象。如果所有对象都不存在特定键,则返回false。
这是我的代码
var x = [{
"item": "alpha",
"value": "red"
}, {
"item": "beta",
"value": "blue"
}, {
"item": "beta",
"value": "gama"
}]
function test(obj) {
var count = 0;
var out = false;
for (var i = 0; i < obj.length; i++) {
if (obj[i].hasOwnProperty('value')) {
count = i;
}
}
if (count == obj.length) {
out = true
}
}
console.log(test(x))
我未定义。无法弄清楚我在这里缺少什么
答案 0 :(得分:0)
这是我的实现,它在给定一组对象的情况下找到每个匹配键,甚至是嵌套键:
function recurse_obj(obj, cb, _stack = []) {
for (var k in obj) {
cb(k, obj[k], _stack);
if (obj.hasOwnProperty(k) && (obj[k] instanceof Object)) {
_stack.push(k);
recurse_obj(obj[k], cb, _stack);
_stack.pop();
}
}
}
function obj_all_keys(obj) {
var tmp = [];
recurse_obj(obj, (k, v, stack) => {
var ext = (stack.length) ? "." : "";
tmp.push(stack.join(".").concat(ext, k));
});
return tmp;
}
function key_intersection(...objs) {
var lookup = {};
objs.forEach(o => {
obj_all_keys(o).forEach(k => {
if (k in lookup === false)
lookup[k] = 0;
lookup[k]++;
});
});
for (var k in lookup)
if (lookup[k] !== objs.length)
delete lookup[k];
return lookup;
}
这是调用代码:
var me = { name: { first: "rafael", last: "cepeda" }, age: 23, meta: { nested: { foo: { bar: "hi" } } } };
console.log(key_intersection(me, { name: { first: "hi" } }));
输出:{ name: 2, 'name.first': 2 }
返回的对象仅包括在所有对象中找到的键,集合交集,计数来自簿记,并且出于性能原因未在被调用者中删除,如果需要,调用者可以执行此操作。
其他嵌套键中包含的键可以从列表中排除,因为它们是隐含的,但我将它们留在那里是为了彻底。
传递集合(对象数组)是微不足道的:
key_intersection.apply(this, collection);
或es6语法:
key_intersection(...collection);
答案 1 :(得分:0)
一种非常简单的方法是使用Array#every这样的
var x = [{
"item": "alpha",
"value": "red"
}, {
"item": "beta",
"value": "blue"
}, {
"item": "beta",
"value": "gama"
}]
function test(obj) {
return obj.every(a => a.hasOwnProperty("value"));
}
console.log(test(x))
&#13;
<强>更新强>
首先正确地提到comment。
答案 2 :(得分:0)
这可以是此对象的简单解决方案:
var x = [{
"item": "alpha",
"value": "red"
}, {
"item": "beta",
"value": "blue"
}, {
"item": "beta",
"value": "gama"
}];
function test(obj) {
var keyCount = 0;
obj.forEach(function (item, index) {
item.hasOwnProperty('value') && ++keyCount;
});
return keyCount == obj.length;
}
console.log(test(x));