Lodash DifferenceBy表现不尽如人意

时间:2016-07-06 00:47:27

标签: javascript lodash

我一直在尝试使用lodash(4.13.1)_.differenceBy而且我必须遗漏一些东西。

我在这里有一个小提琴: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。

如果我正确理解文档,iteratee可以是一个数组,但也许我错了?请有人请我直截了当?

1 个答案:

答案 0 :(得分:1)

换句话说,我的评论是要么等待更聪明的人回答有关差异如何与数组参数一起使用,或者使用......

$scope.differenceBy = _.differenceBy($scope.files_a, $scope.files_b, function(obj) {
    return obj.name + obj.size;
});

似乎在你的小提琴中正常工作。