【问题标题】:Comparison of array of objects in the same collection with similar properties同一集合中具有相似属性的对象数组的比较
【发布时间】:2018-08-28 07:23:54
【问题描述】:

我正在尝试比较数组中的每个对象。

假设下面是我的数组:

var objects = [{
        'x': 1,
        'y': 2
    }, {
        'x': 2,
        'y': 1
    },{
        'x': 3,
        'y': 1
    },{
        'x': 4,
        'y': 1
    }];

给定两个项目,比如item1item2,我需要通过数组检查条件item1.x == item2.yitem1.y == item2.x

Lodash 中是否有干净/高效的方法?

【问题讨论】:

标签: javascript lodash


【解决方案1】:
var newArray = _.map(objects, function(item) {
    if (item.x == item.y) return item;
});

var filteredNewArray = _.without(newArray, undefined)

console.log(filteredNewArray)

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
  • @Fraser,下次一定记得 :)
【解决方案2】:

您可以使用地图。 这可能会有所帮助,

objects.map((value, index) => {
    return value.x == value.y
})

【讨论】:

    【解决方案3】:

    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>

    这个复杂度是 O(n^2)

    注意:如果在开始比较之前对数组进行排序,则可以使其 O(nlogn),但这会给代码带来很大的噪音。

    细分:

    _.map(somearray, somefunction) functionsomefunction 执行到somearray 的每个元素中。我们将使用它将objects 数组的每一项转换为布尔值。大致是这样的:

    var comparedLodash = _.map(objects, functionThatWillConvertAnItemIntoABoolean);
    

    现在,如果有anotherItemitem1.x == anotherItem.yitem1.y == anotherItem.x,则每个item1 都应转换为true。要查找是否存在另一个项目,我们使用_.find()

    _.find(somearray, someobject) 尝试判断someobject 是否存在于somearray 中。这就是为什么我们在上面这样做:

    function (item) {
      var anotherItem = {x: item.y, y: item.x}
      return _.find(objects, anotherItem); 
    }
    

    最后,_.find 如果找到则返回对象,如果未找到则返回undefined。我们使用 !! 将其转换为布尔值(!!undefined 变为 false!!someobject 变为 true)。

    【讨论】:

    • 你能解释一下吗
    • 添加说明。请检查答案
    • 太好了 :) 谢谢
    猜你喜欢
    • 1970-01-01
    • 2021-01-11
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    相关资源
    最近更新 更多