有两个数组对象,需要将他们合并为一个对象,并且根据工号去重,如下所示:
let arr = [
{ jobNo: '1', name: '张三'}
{ jobNo: '2', name: '李四'}
{ jobNo: '3', name: '王五'}
{ jobNo: '4', name: '宋六'}
]
let arr1 = [
{ jobNo: '4', name: '宋六'}
{ jobNo: '5', name: '宋江'}
{ jobNo: '6', name: '武松'
]
方法如下所示:
方式一:Map(),最方便
const arrs = [...arr, ...arr1]
const map = new Map()
for (const item of arrs) {
if (!map.has(item.jobNo)) {
map.set(item.jobNo, item)
}
}
// target为最终结果
cosnt target = [...map.values()]
当然还有好几种方法,比如ES5的冒泡排序,双层for循环加上Array.splice()方法;再比如forEach搭配Array.every()方法等等,很多,我还是最喜欢使用Map方式,无论是数组还是数组对象,都能够很好的去重。在这里就不一一详写,冒泡排序方法如下所示:
冒泡排序
for (var i = 0; i < arrs.length - 1; i++) {
for (var j = i + 1; j < arrs.length; j++) {
if (arrs[i].name == arrs[j].name) {
arrs.splice(j, 1);
//因为数组长度减小1,所以直接 j++ 会漏掉一个元素,所以要 j--
j--;
}
}
}