#javascript
#javascript
Вопрос:
Я хочу отфильтровать данные из массива JS и создать другой массив JS. Я объяснил сценарий, как показано ниже.
Существует два массива JS. они arr1
и arr2
const arr1 = [
{
code: "XXY",
dis: "cont1",
note: "Note for cont1"
},
{
code: "AAW",
dis: "cont2",
note: "Note for cont2"
},
{
code: "TTR",
dis: "cont5",
note: "Note for cont5"
},
{
code: "MMN",
dis: "cont10",
note: "Note for cont10"
}];
const arr2 = [
{
code: "XXY",
dis: "cont1",
note: "Note for cont1"
},
{
code: "AAW",
dis: "cont2",
note: "Note for cont2"
},
{
code: "TTR",
dis: "cont5",
note: "Note for cont5"
},
{
code: "MMN",
dis: "cont10",
note: "Note for cont10"
},
{
code: "vvg",
dis: "cont15",
note: "Note for cont15"
}];
мы можем внести изменения в arr2[1].dis
и arr2[2].note
и arr2[4].note
. Я упоминал об этом ниже
const arr2 = [
{
code: "XXY",
dis: "cont1",
note: "Note for cont1"
},
{
code: "AAW",
dis: "cont2 new",
note: "Note for cont2"
},
{
code: "TTR",
dis: "cont5",
note: "New Note for cont5"
},
{
code: "MMN",
dis: "cont10",
note: "Note for cont10"
},
{
code: "VVG",
dis: "cont15",
note: "Note for cont15 changed"
}];
Как только я изменил arr2
, я хочу сравнить его с arr1
и создать new_arr
и перенести все измененные элементы в new_arr
. Сравнение должно быть выполнено с. code
Потому code: "VVG"
что есть изменения. Но он не должен содержать новый массив. Потому code: "VVG"
что не в arr1
.
Expected-output :
[
{
code: "AAW",
dis: "cont2 new",
note: "Note for cont2"
},
{
code: "TTR",
dis: "cont5",
note: "New Note for cont5"
}
]
Пробный код:
const codesss = new Set(arr1.map(({ code }) => code));
const new_arr = arr2.filter(({ code }) => !codesss.has(code));
console.log(new_arr);
текущий вывод:
[
{
"code": "VVG",
"dis": "cont15",
"note": "Note for cont15 changed"
}
]
Мой current output
не тот Expected-output
. Пожалуйста, помогите мне решить эту проблему.
Ответ №1:
Во-первых, используя Array.prototype.reduce
, вы можете создать новый объект из arr1
code
переменной as key
.
На основе этого объекта вы можете отфильтровать необходимые объекты с помощью Array.prototype.filter
.
const arr1 = [
{
code: "XXY",
dis: "cont1",
note: "Note for cont1"
},
{
code: "AAW",
dis: "cont2",
note: "Note for cont2"
},
{
code: "TTR",
dis: "cont5",
note: "Note for cont5"
},
{
code: "MMN",
dis: "cont10",
note: "Note for cont10"
}];
const arr2 = [
{
code: "XXY",
dis: "cont1",
note: "Note for cont1"
},
{
code: "AAW",
dis: "cont2 new",
note: "Note for cont2"
},
{
code: "TTR",
dis: "cont5",
note: "New Note for cont5"
},
{
code: "MMN",
dis: "cont10",
note: "Note for cont10"
},
{
code: "VVG",
dis: "cont15",
note: "Note for cont15 changed"
}];
const arr1Obj = arr1.reduce((acc, cur) => {
acc[cur.code] = cur;
return acc;
}, {});
const result = arr2.filter((item) => arr1Obj[item.code] amp;amp; !(arr1Obj[item.code].dis === item.dis amp;amp; arr1Obj[item.code].note === item.note));
console.log(result);
Ответ №2:
const arr1 = [
{
code: "XXY",
dis: "cont1",
note: "Note for cont1"
},
{
code: "AAW",
dis: "cont2",
note: "Note for cont2"
},
{
code: "TTR",
dis: "cont5",
note: "Note for cont5"
},
{
code: "MMN",
dis: "cont10",
note: "Note for cont10"
}];
const arr2 = [
{
code: "XXY",
dis: "cont1",
note: "Note for cont1"
},
{
code: "AAW",
dis: "cont2",
note: "Note for cont2"
},
{
code: "TTR",
dis: "cont5",
note: "Note for cont5"
},
{
code: "MMN",
dis: "cont10",
note: "Note for cont10"
},
{
code: "vvg",
dis: "cont15",
note: "Note for cont15"
}];
const arr2Changed = [
{
code: "XXY",
dis: "cont1",
note: "Note for cont1"
},
{
code: "AAW",
dis: "cont2 new",
note: "Note for cont2"
},
{
code: "TTR",
dis: "cont5",
note: "New Note for cont5"
},
{
code: "MMN",
dis: "cont10",
note: "Note for cont10"
},
{
code: "VVG",
dis: "cont15",
note: "Note for cont15 changed"
}];
const arr1Codes = {};
const newArray = [];
arr1.map(i => arr1Codes[i.code] = 1);
arr2Changed.map((item, index) => {
const arr2Item = arr2[index];
if (arr1Codes[arr2Item.code] amp;amp; (arr2Item.dis !== item.dis || arr2Item.note !== item.note)) {
newArray.push(item);
}
});
console.log(newArray);