我一直在用这个问题摸不着头脑,即使是艰难的事情也感觉很轻松。我有一个包含一组对象的数组。该数组如下所示:
[ { key1: 'ok', key2: 'ok', key3: '--' },
{ key1: 'ok', key2: '--', key3: 'ok' },
{ key1: 'ok', key2: 'ok', key3: '--' } ]
我想要一个比较对象的函数,并返回全部为“ok”的键作为它的值。在这种情况下,我希望它返回
key1
我一直在关注Compare objects in an array寻找灵感,但它并没有这样做。
有人有任何建议吗?将是一个救生员
答案 0 :(得分:2)
您可以迭代数组并过滤密钥。
var array = [{ key1: 'ok', key2: 'ok', key3: '--' }, { key1: 'ok', key2: '--', key3: 'ok' }, { key1: 'ok', key2: 'ok', key3: '--' }],
result = array.reduce(function (r, o) {
return r.filter(function (k) {
return o[k] === 'ok';
});
}, Object.keys(array[0]));
console.log(result);

ES6
var array = [{ key1: 'ok', key2: 'ok', key3: '--' }, { key1: 'ok', key2: '--', key3: 'ok' }, { key1: 'ok', key2: 'ok', key3: '--' }],
result = array.reduce((r, o) => r.filter(k => o[k] === 'ok'), Object.keys(array[0]));
console.log(result);

答案 1 :(得分:1)
很可能不是最短的解决方案,但应该很容易理解......
var obj = [ { key1: 'ok', key2: 'ok', key3: '--' },
{ key1: 'ok', key2: '--', key3: 'ok' },
{ key1: 'ok', key2: 'ok', key3: '--' } ];
var keycount = {};
obj.forEach((o) => {
Object.keys(o).forEach((key) => {
if (o[key] === 'ok')
keycount[key] = (keycount[key] || 0) + 1;
});
});
Object.keys(keycount).forEach((key) => {
if (keycount[key] === obj.length)
console.log(`Found ${key}`);
});
答案 2 :(得分:1)
假设所有对象都具有相同的键:
for (var key in arr[0]){
var allok = true;
for (var i = 0; i < arr.length; i++){
if (arr[i][key] !== "ok") {
allok = false;
break;
}
}
if (allok) {console.log(key);}
}
答案 3 :(得分:1)
这就是我要做的事情:
var objs = [ { key1: 'ok', key2: 'ok', key3: '--' },
{ key1: 'ok', key2: '--', key3: 'ok' },
{ key1: 'ok', key2: 'ok', key3: '--' } ];
var getOkKeys = function(objs) {
return Object.keys(objs[0]).reduce(function(results, key) {
if (objs.every(function(obj) { return (obj[key] === 'ok'); })) {
results.push(key);
}
return results;
}, []);
};
console.log(getOkKeys(objs));
根据要求,返回键的函数 - getOkKeys()
。