Редактировать Все еще пытаясь решить эту проблему, помощь очень ценится.Моя самая большая проблема - определить, какой тип или значение было обновлено , потому что мне нужно также получить сведения о соответствующем продукте.
У меня есть массив объектов с именем "oldList" со следующей структурой.
var oldList = [
{
productId: "1",
productName: "Photo Frame",
Quantity: "20",
attributes: [
{
type: "frame",
value: "black"
},
{
type: "finish",
value: "matte"
}
]
},
{
productId: "2",
productName: "Photo Frame",
Quantity: "50",
attributes: [
{
type: "frame",
value: "black"
},
{
type: "finish",
value: "glossy"
}
]
},
{
productId: "3",
productName: "Photo Frame",
Quantity: "10",
attributes: [
{
type: "frame",
value: "white"
},
{
type: "finish",
value: "matte"
}
]
},
{
productId: "4",
productName: "Photo Frame",
Quantity: "100",
attributes: [
{
type: "frame",
value: "white"
},
{
type: "finish",
value: "glossy"
}
]
},
{
productId: "5",
productName: "Photo Frame",
Quantity: "89",
attributes: [
{
type: "frame",
value: "wood"
},
{
type: "finish",
value: "matte"
}
]
},
{
productId: "6",
productName: "Photo Frame",
Quantity: "10",
attributes: [
{
type: "frame",
value: "wood"
},
{
type: "finish",
value: "glossy"
}
]
}
];
Далее у меня есть еще один список с именем "updatedList" со следующей структурой.В основном это обновленная копия массивов вложенных атрибутов.Например, в массиве атрибутов было 3 изменения:
Пользователь заменил значение «черный» на «золото».Поскольку я знаю, что пользователь обновляет значение с «черного» до «золотого», другие свойства, такие как productId productName и количество, которые пользователь ранее вводил в старом списке, все равно должны быть сохранены, поскольку они просто меняют значениеиз массива атрибутов.
Пользователь удалил значение «дерево»
- Пользователь добавил значение «серебро»
СейчасЯ хочу найти разницу между oldList и newList, чтобы отслеживать, что пользователь добавил, удалил или обновил.Например, это желаемый результат
var mergeList = [
{
// Value is updated from black to gold
productId: "1",
productName: "Photo Frame",
Quantity: "20",
attributes: [
{
type: "frame",
value: "gold"
},
{
type: "finish",
value: "matte"
}
]
},
{
// Value is updated from black to gold
productId: "2",
productName: "Photo Frame",
Quantity: "50",
attributes: [
{
type: "frame",
value: "gold"
},
{
type: "finish",
value: "glossy"
}
]
},
{
// No changes
productId: "3",
productName: "Photo Frame",
Quantity: "10",
attributes: [
{
type: "frame",
value: "white"
},
{
type: "finish",
value: "matte"
}
]
},
{
// No changes
productId: "4",
productName: "Photo Frame",
Quantity: "100",
attributes: [
{
type: "frame",
value: "white"
},
{
type: "finish",
value: "glossy"
}
]
},
{
// Newly added. No product details such as productId, Quantity and etc
// for the time being.
attributes: [
{
type: "frame",
value: "silver"
},
{
type: "finish",
value: "matte"
}
]
},
{
// Newly added. No product details such as productId, Quantity and etc
// for the time being.
attributes: [
{
type: "frame",
value: "silver"
},
{
type: "finish",
value: "silver"
}
]
}
];
Это мой текущий код.Я действительно не знаю, как подойти к этой ситуации.К вашему сведению, метод разница с взят из библиотеки с именем lodash.
// #1 Inspect and compare (oldlist) with newlist
var difference1 = differencewith(
oldList,
newList,
isequal
);
// #2 compare new list with old list
var difference2 = differencewith(
newList,
oldList,
isequal
);