【问题标题】:Without array of objects没有对象数组
【发布时间】:2015-12-12 15:00:57
【问题描述】:

我正在尝试实现一个类似于 lodash _.without 的函数,但它应该适用于对象数组:

function withoutArrayOfObjects (arr1, arr2) {
  var resultArr = [];
  for (var i = 0; i < arr1.length; i++) {
    for (var j = 0; j < arr2.length; j++) {
      if (!_.isEqual(arr1[i], arr2[j])) {
        resultArr.push(arr1[i]);
      }
    }
  }
  return resultArr;
}

在这种情况下可以正常工作:

var array1 = [{0: 'test', 1: 'test2'}, {0: 'test3', 1: 'test4'}];
var array2 = [{0: 'test', 1: 'test2'}];
withoutArrayOfObjects(array1, array2);

但是如果数组包含两个对象则失败:

var array3 = [{0: 'test', 1: 'test2'}, {0: 'test3', 1: 'test4'}, {0: 'test5', 1: 'test6'}, {0: 'test7', 1: 'test8'}];
var array4 = [{0: 'test', 1: 'test2'}, {0: 'test5', 1: 'test6'}];
withoutArrayOfObjects(array3, array4);

您能帮我修复/改进功能吗?使用纯 JS 或 jquery/lodash。

【问题讨论】:

    标签: javascript jquery lodash


    【解决方案1】:

    试试这个(ES6):

    resultArr = arr1.filter(obj1 => {
      return !arr2.some(obj2 => _.isEqual(obj1, obj2));
    });
    

    或者在 ES5 中:

    resultArr = arr1.filter(function (obj1) {
      return !arr2.some(function (obj2) { 
        return _.isEqual(obj1, obj2); 
      });
    });
    

    即我们从arr1 创建一个新数组,通过filter 找出在arr2 中具有some 等价物的项目。

    【讨论】:

    • 导致脚本错误:'Uncaught ReferenceError: ob1 is not defined'。 ES5 版本。
    • 如果您将代码更正为resultArr = arr1.filter(function (obj1) { return !arr2.some(function (obj2) { return _.isEqual(obj1, obj2); }); });,我会接受您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 2021-06-06
    • 2021-07-15
    相关资源
    最近更新 更多