需求
假设有两个数组 initArr = [a,b,c,d],latestArr = [a,c,d,e,f],合并数组并作出标记,比较之后的结果是 initArr = [a,b,c,d,e,f],
- 最新的initArr中a元素相比较原initArr和latestArr,都存在,所以给最新的initArr中的a(Object),标记为flag = "";
- 最新的initArr中b元素在原initArr中存在,但是在latestArr中不存在,所以给最新的initArr中的b(Object)标记为flag ="delete";
- 最新的initArr中e元素在原initArr中不存在,但是在latestArr中存在,所以给最新的initArr中的e(Object)标记为flag ="add";
题目的意思大概就是这样,(本人表达能力不强)不知道圈里大佬是否理解题目?
代码
程序员的世界,惜字如金,代码直接安排上;
let originArr = [
{
label: '张三',
// value: 1,7 6他6他
children: [
// {
// label: '张三的儿子',
// // value: 11,
// // flag: 'del'
// children: []
// }
]
}
// {
// label: 'zjangso',
// children: [{
// label: 'test1',
// children: []
// },
// {
// label: 'test2',
// children: []
// }
// ]
// }
]
let updateArr = [
{
label: '张三',
// value: 1,
children: [
{
label: '张三的儿子',
// value: 12,
children: []
}
]
}
// , {
// label: 'zjangso',
// children: [{
// label: 'test2',
// children: []
// },
// {
// label: 'test3',
// children: []
// }]
// }, {
// label: 'haha',
// children: []
// }
]
function deepCompare(arr, compareArr) {
var o;
o = [];
arr.forEach(item => {
let tmp = compareArr.find(sub => sub.label === item.label)
if (!tmp) {
item.flag = 'del'
o.push(item)
}
})
compareArr.forEach(item => {
let tmp = arr.find(sub => sub.label === item.label)
if (!tmp) {
item.flag = 'add'
o.push(item)
}
})
arr.map(item => {
let tmp = compareArr.find(sub => item.label === sub.label)
if (tmp) {
let pre = { ...item }
pre.flag = ''
if (item.children && item.children.length || tmp.children && tmp.children.length) {
pre.children = deepCompare(item.children, tmp.children)
}
o.push(pre)
}
})
console.log(o)
return o
}
let result = deepCopy(originArr, updateArr)
console.log(result)
代码大概就这样,因本人比较菜,代码可能有误,希望各位大佬多多指教