我正在尝试实现类似于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。
答案 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
filter
在some
中arr2
个const 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}}。