我试图比较数组中的每个对象。
让我们在下面说出我的阵列:
var objects = [{
'x': 1,
'y': 2
}, {
'x': 2,
'y': 1
},{
'x': 3,
'y': 1
},{
'x': 4,
'y': 1
}];
如果有两个项目,比如item1
和item2
,我需要通过数组检查条件item1.x == item2.y
和item1.y == item2.x
。
Lodash 是否有干净/有效的方法?
答案 0 :(得分:1)
var objects = [
{'x': 1, 'y': 2},
{'x': 2, 'y': 1},
{'x': 3, 'y': 1},
{'x': 4, 'y': 1}
];
var comparedLodash = _.map(objects, function (item) {
return !!_.find(objects, {x: item.y, y: item.x});
});
console.log(comparedLodash);

<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.5/lodash.min.js"></script>
&#13;
复杂性为 O(n ^ 2) 。
注意:如果在开始比较之前对数组进行了排序,则可以将其设为 O(nlogn),但这会给代码增加很大的噪音。
_.map(somearray, somefunction)
function将somefunction
执行到somearray
的每个元素中。我们将使用它将objects
数组的每个项转换为布尔值。大致就像是:
var comparedLodash = _.map(objects, functionThatWillConvertAnItemIntoABoolean);
现在,如果有item1
true
和anotherItem
item1.x == anotherItem.y
,则每个item1.y == anotherItem.x
都应转换为someobject
。要查找此另一项是否存在,我们使用_.find()
。
somearray
中存在function (item) {
var anotherItem = {x: item.y, y: item.x}
return _.find(objects, anotherItem);
}
, _.find(somearray, someobject)
会尝试。这就是为什么我们在上面做的事情:
_.find
最后,undefined
会返回对象(如果找到),!!
(如果找不到)。我们使用!!undefined
将其转换为布尔值(false
变为!!someobject
而true
变为df.loc[~df.id.isin(df.id.loc[df.status_id==1])]
Out[504]:
id name email status_id
3 25 Bill b@b.com 2
4 25 Bill b@b.com 3
5 28 Claire c@c.com 3
。)
答案 1 :(得分:0)
var newArray = _.map(objects, function(item) {
if (item.x == item.y) return item;
});
var filteredNewArray = _.without(newArray, undefined)
console.log(filteredNewArray)
答案 2 :(得分:0)
您可以使用地图。 这可能会有所帮助,
objects.map((value, index) => {
return value.x == value.y
})