没有对象数组

时间:2015-12-12 15:00:57

标签: javascript jquery lodash

我正在尝试实现类似于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。

1 个答案:

答案 0 :(得分:2)

试试这个(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 filtersomearr2const char* WavRead::getFilePath(){ std::string input; std::cout << "Input wave file name: "; std::cin >> input; std::cin.get(); filePath = input.c_str(); return filePath; } 来创建一个新数组{/ 1}}。