簡體   English   中英

如何比較數組中對象之間的值?

[英]How can I compare values between objects in an array?

我已經為此花了很長的時間撓撓自己的頭,即使是艱難的感覺也很容易。 我有一個帶有一組對象的數組。 該數組如下所示:

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

我想要一個比較對象的函數,並返回具有所有“確定”值的鍵。 在這種情況下,我希望它返回

key1

我一直在觀察比較數組中的對象以獲取靈感,但實際上並沒有這樣做。

有人有什么建議嗎? 可以挽救生命

您可以迭代數組並過濾鍵。

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

最有可能不是最短的解決方案,但應該易於遵循。

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

假設所有對象都具有相同的鍵:

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

這就是我要做的:

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

暫無
暫無

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

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