我一直在尝试使用 lodash (4.13.1) _.differenceBy,但我一定错过了一些东西。
我这里有一个 fiddle :http://jsfiddle.net/cmwye4z1/2/
这是 JavaScript:
$scope.files_a = [
{'name': 'file1.wav', 'size': 989010, 'duration': 44.953, 'temp': 1},
{'name': 'file2.wav', 'size': 326984, 'duration': 14.860, 'temp': 1},
{'name': 'file3.wav', 'size': 584723, 'duration': 28.583, 'temp': 1},
{'name': 'file4.wav', 'size': 483829, 'duration': 22.859, 'temp': 1},
{'name': 'file5.wav', 'size': 283949, 'duration': 9.495, 'temp': 1},
{'name': 'file6.wav', 'size': 839372, 'duration': 38.584, 'temp': 1},
{'name': 'file7.wav', 'size': 784949, 'duration': 29.594, 'temp': 1}
];
$scope.files_b = [
{'name': 'file8.wav', 'size': 989010, 'duration': 44.953, 'temp': 'auto'},
{'name': 'file2.wav', 'size': 326984, 'duration': 14.860, 'temp': 1}
];
$scope.differenceBy = _.differenceBy($scope.files_a, $scope.files_b, ['name', 'size', 'duration']);
我期望的是:
$scope.differenceBy = [
{'name': 'file1.wav', 'size': 989010, 'duration': 44.953, 'temp': 1},
{'name': 'file3.wav', 'size': 584723, 'duration': 28.583, 'temp': 1},
{'name': 'file4.wav', 'size': 483829, 'duration': 22.859, 'temp': 1},
{'name': 'file5.wav', 'size': 283949, 'duration': 9.495, 'temp': 1},
{'name': 'file6.wav', 'size': 839372, 'duration': 38.584, 'temp': 1},
{'name': 'file7.wav', 'size': 784949, 'duration': 29.594, 'temp': 1}
];
删除了 file2.wav,但我得到的只是 $scope.files_a。
如果我删除括号,则会得到 file3、file4、file5、file6 和 file7。
如果我正确理解文档,迭代器可以是一个数组,但也许我错了?有人可以帮我纠正一下吗?
最佳答案
换句话说,我的评论是要么等待更聪明的人给出有关 DifferenceBy 如何真正使用数组参数的答案,要么使用...
$scope.differenceBy = _.differenceBy($scope.files_a, $scope.files_b, function(obj) {
return obj.name + obj.size;
});
它在你的 fiddle 中似乎可以正常工作。
关于javascript - Lodash 的差异在于行为不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38214915/