如何比较数组中对象之间的值?

时间:2017-02-03 22:16:04

标签: javascript arrays object

我一直在用这个问题摸不着头脑,即使是艰难的事情也感觉很轻松。我有一个包含一组对象的数组。该数组如下所示:

[ { key1: 'ok', key2: 'ok', key3: '--' },
  { key1: 'ok', key2: '--', key3: 'ok' },
  { key1: 'ok', key2: 'ok', key3: '--' } ]

我想要一个比较对象的函数,并返回全部为“ok”的键作为它的值。在这种情况下,我希望它返回

key1

我一直在关注Compare objects in an array寻找灵感,但它并没有这样做。

有人有任何建议吗?将是一个救生员

4 个答案:

答案 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()