检查Javascript对象是否包含相同的键/值Lodash

时间:2016-06-30 22:09:03

标签: javascript arrays object lodash

无法弄清楚如何找到一个相等的键:数组中的值由对象组成。

我有一个数组,其中的对象看起来像这样

[{
0:false, 
1:false, 
2:false, 
3:true, 
4:false, 
5:false
},{
0:false, 
1:false, 
2:false, 
3:true, 
4:false, 
5:false
},{
0:false, 
1:false, 
2:false, 
3:true, 
4:false, 
5:false
}]

我需要使用对象迭代此数组,如果所有对象都获得具有真值的相同键(在上面的示例中,所有对象都具有相同的key:3value: true)然后我需要捕获这个关键(位置)。

最佳解决方案是什么?我也使用Lodash所以也许使用这个库很容易得到我想要的或者可能使用普通的javascript。无论如何获得它,只需要一个正确的解决方案。

2 个答案:

答案 0 :(得分:2)

使用_.findKey_.every



var arr = [{"0":false,"1":false,"2":false,"3":true,"4":false,"5":false},{"0":false,"1":false,"2":false,"3":true,"4":false,"5":false},{"0":false,"1":false,"2":false,"3":true,"4":false,"5":false}];

var key = _.findKey(arr[0], function(val, key) {
  return val && _.every(arr, key);
});
                        
console.log(key);

<script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.min.js"></script>
&#13;
&#13;
&#13;

如果您正在使用ES6,则可以将其缩短为:

let key = _.findKey(arr[0], (v, k) => v && _.every(arr, k));

如果您决定切换到更自然的2D阵列结构,请改用_.findIndex

[
  [false,false,false,true,false,false],
  [false,false,false,true,false,false],
  [false,false,false,true,false,false],
  [false,false,false,true,false,false],
  [false,false,false,true,false,false]
]

答案 1 :(得分:1)

首先,为了简单起见,我更改了对象作为数组索引的对象,因为这就是数组的内容:只是a special object with indices as keys

你可以试试这个。它没有使用lodash(我不熟悉它,抱歉),但它的作用是:

  1. 从一个与每个对象的长度相匹配的所有true值的数组开始(即长度为6)
  2. 遍历每个对象和每个对象的每个属性。
  3. 如果是false,则该索引的值为false。如果为true,那么如果索引已经true,则索引将为true
  4. 打印出保留true的索引。
  5. 您可以通过以下代码了解我的意思:

    &#13;
    &#13;
    var list = [[false,false,false,true,false,false],[false,false,false,true,false,false],[false,false,false,true,false,false],[false,false,false,true,false,false],[false,false,false,true,false,false]];
    
    var trueKeys = [true, true, true, true, true, true];
    for(obj in list)
      for(prop in list[obj])
        trueKeys[prop] = trueKeys[prop] && list[obj][prop];
    var index = trueKeys.indexOf(true);
    
    console.log(index);
    &#13;
    &#13;
    &#13;