2016-01-29 3 views
0

У меня есть два списка, oldPanodatas и newPanodatas. Я хочу получить только объекты в newPanodatas, которых нет в oldPanodatas. Я сделал это:Почему _.difference возвращает все элементы?

var filteredPanodatas = _.difference(newPanodatas, oldPanodatas) 

Но я получаю все элементы, _.difference не фильтрует ничего вообще:

OLD: Object {roomModelId: "56a9e0088ac247005538d6d3", x: 262, index: 1, y: 211, panoDataRotate: 0…} 
OLD: Object {roomModelId: "56a9e0088ac247005538d6d3", x: 177, index: 0, y: 182, panoDataRotate: 0…} 
NEW: Object {index: 0, x: 177, y: 182, roomModelId: "56a9e0088ac247005538d6d3", panoDataRotate: 0} 
NEW: Object {index: 1, x: 262, y: 211, roomModelId: "56a9e0088ac247005538d6d3", panoDataRotate: 0} 
NEW: Object {index: 2, x: 200, y: 200, roomModelId: "56a9e0088ac247005538d6d3", panoDataRotate: 0} 
FILTERED: Object {index: 0, x: 177, y: 182, roomModelId: "56a9e0088ac247005538d6d3", panoDataRotate: 0} 
FILTERED: Object {index: 1, x: 262, y: 211, roomModelId: "56a9e0088ac247005538d6d3", panoDataRotate: 0} 
FILTERED: Object {index: 2, x: 200, y: 200, roomModelId: "56a9e0088ac247005538d6d3", panoDataRotate: 0} 

Почему это? Каков правильный способ добиться того, что я хочу?

ответ

1

Попробуйте с differceWith, в isEqual компаратор, который вызывается для сравнения элементов массива значений

_.differenceWith(newPanodatas, oldPanodatas, _.isEqual); 

образец кода,

var old = [{roomModelId: "56a9e0088ac247005538d6d3", x: 262, index: 1, y: 211, panoDataRotate: 0}, {roomModelId: "56a9e0088ac247005538d6d3", x: 177, index: 0, y: 182, panoDataRotate: 0}]; 
newobj = [{index: 0, x: 177, y: 182, roomModelId: "56a9e0088ac247005538d6d3", panoDataRotate: 0}, {index: 1, x: 262, y: 211, roomModelId: "56a9e0088ac247005538d6d3", panoDataRotate: 0}, {index: 2, x: 200, y: 200, roomModelId: "56a9e0088ac247005538d6d3", panoDataRotate: 0}]; 
r = _.differenceWith(newobj, old, _.isEqual); 

Результат r

[{index: 2, panoDataRotate: 0, roomModelId: "56a9e0088ac247005538d6d3", x: 200, y: 200}] 
+0

Weird , по какой-то причине журнал 'FILTERED:' не регистрирует anym если я использую ваш код. – alex

+0

@alex, добавьте больше тестовых кодов ... – zangw

+0

Вот JSFiddle: https://jsfiddle.net/alexcheninfo/ezywL686/1/ (я изменил код фильтрации, так как мне нужно фильтровать элементы по индексу). Как вы можете видеть, последний 'console.log()' ничего не записывает. – alex

Смежные вопросы