4 回答

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個(gè)贊
方法一,直接遍歷搜尋
//老數(shù)組
const olds = [
{ form_id: 1, field_id: 10, data: "215", member_id: 101 },
{ form_id: 12, field_id: 2, data: "215212", member_id: 101 },
{ form_id: 2, field_id: 31, data: "123", member_id: 101 }
];
//新數(shù)組
const news = [
{ form_id: 2, field_id: 31, data: "123321", member_id: 101 }
];
function itemEquals(a, b) {
return a.form_id === b.form_id
&& a.field_id === b.field_id
&& a.member_id === b.member_id
}
// 遍歷舊數(shù)據(jù),對(duì)每個(gè)元素去遍歷新數(shù)組,查找是否有對(duì)應(yīng)數(shù)據(jù)
olds.forEach(item => {
const found = news.find(n => itemEquals(n, item));
if (found) {
item.data = found.data;
}
});
console.log(olds);
上面的方面在新數(shù)據(jù)較大的時(shí)候,查詢效率會(huì)比較低,那就可以采用拼接唯一ID的方法來(lái)處理
// 根據(jù)幾個(gè)屬性生成唯一鍵,注意間隔字符的選中,一定不能造成歧義
function unique(item) {
return `${item.form_id}-${item.field_id}-${item.member_id}`;
}
const dict = news.reduce((dict, item) => {
dict[unique(item)] = item;
return dict;
}, {});
olds.forEach(item => {
const found = dict[unique(item)];
if (found) {
item.data = found.data
}
});

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊
提供一個(gè)思路。如果數(shù)組元素比較少,可以窮舉遍歷,三層循環(huán),復(fù)雜度較高。
如果數(shù)組元素比較多,可以考慮用空間換時(shí)間。將新數(shù)組轉(zhuǎn)成容易查找的數(shù)據(jù)結(jié)構(gòu),比如多維數(shù)組,多層map,樹(shù),等,然后遍歷老數(shù)組,一邊遍歷一邊比較,找到一個(gè)就設(shè)置,找不到就跳過(guò)

TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊
let oldArray = [
{form_id: 1, field_id: 10, data: "215", member_id: 101},
{form_id: 12, field_id: 2, data: "215212", member_id: 101},
{form_id: 2, field_id: 31, data: "123", member_id: 101}
];
let newArray = [{form_id: 2, field_id: 31, data: "123321", member_id: 101}];
for (let i = 0; i < oldArray.length; i++) {
for (let a of newArray) {
const o = oldArray[i];
if (o.form_id === a.form_id && o.field_id === a.field_id && o.member_id === a.member_id) {
oldArray[i].data = a.data;
}
}
}
console.log(oldArray);
輸出:
[ { form_id: 1, field_id: 10, data: '215', member_id: 101 },
{ form_id: 12, field_id: 2, data: '215212', member_id: 101 },
{ form_id: 2, field_id: 31, data: '123321', member_id: 101 } ]
添加回答
舉報(bào)