无法弄清楚如何找到一个相等的键:数组中的值由对象组成。
我有一个数组,其中的对象看起来像这样
[{
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:3
和value: true
)然后我需要捕获这个关键(位置)。
最佳解决方案是什么?我也使用Lodash所以也许使用这个库很容易得到我想要的或者可能使用普通的javascript。无论如何获得它,只需要一个正确的解决方案。
答案 0 :(得分:2)
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;
如果您正在使用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(我不熟悉它,抱歉),但它的作用是:
true
值的数组开始(即长度为6)false
,则该索引的值为false
。如果为true,那么如果索引已经true
,则索引将为true
。true
的索引。您可以通过以下代码了解我的意思:
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;