Ich habe versucht, lodash (4.13.1) _.differenceBy zu verwenden, und ich muss etwas verpassen.Lodash DifferenceBy verhält sich nicht wie excepted
ich eine Geige hier haben: http://jsfiddle.net/cmwye4z1/2/
Hier ist das 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']);
Und was erwartete ich war:
$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}
];
Mit file2.wav entfernt, aber was ich get ist nur $ scope.files_a.
Wenn ich die Klammern entfernen, dann bekomme ich file3, file4, file5, file6 und file7.
Wenn ich die Dokumentation richtig verstehe, kann der iteratee ein Array sein, aber vielleicht irre ich mich? Kann mir bitte jemand klarstellen?
Mein Anwendungsfall ist, dass ich mit einer großen Anzahl von Dateien zu tun habe und manchmal die Dateinamen identisch sein können, obwohl die Datei selbst unterschiedlich ist und ich zwischen Dateien unterscheiden kann, die identisch sein können oder nicht . – JulieMarie
Es ist schwer zu verstehen, was sie in der Dokumentation meinen, und deine Geige ist ebenso mysteriös. Meine (zugegebenermaßen faule) Herangehensweise wäre es, dem iteratee eine Funktion zu geben, die den Namen concat'd mit der Größe in Bytes (als String) zurückgibt. – danh