在 l push 对象的时候 是push的引用值 为了保证每一次 puhs的都是不同的对象 需要通过 JSON 做一个深拷贝
这里我解决了 但是一直在蒙 在 push之前 打印 出来的 item数据 每个都是不相同的 其实就是深拷贝的问题
最后使用 lodash 排序 输出结果
(12) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {name: “1”, age: 18, message: “成年”}
1: {name: “1”, age: 18, message: “你刚成年”}
2: {name: “1”, age: 18, message: “成年快乐”}
3: {name: “2”, age: 30, message: “结婚”}
4: {name: “3”, age: 17}
5: {name: “4”, age: 18, message: “成年”}
6: {name: “4”, age: 18, message: “你刚成年”}
7: {name: “4”, age: 18, message: “成年快乐”}
8: {name: “5”, age: 17}
9: {name: “6”, age: 18, message: “成年”}
10: {name: “6”, age: 18, message: “你刚成年”}
11: {name: “6”, age: 18, message: “成年快乐”}
length: 12
<script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.21/lodash.js"></script>
<script>
const obj1 = [{ name:'1' , age : 18},{ name:'2' , age : 30},{ name:'3' , age : 17},{ name:'4' , age : 18},{ name:'5' , age : 17},{ name:'6' , age : 18},]
const list = [ { age:18, message : '成年'} , { age:30, message : '结婚'}, { age:18, message : '你刚成年'} , { age:18, message : '成年快乐'} ,]
const l = []
obj1.map( ob => {
let i =0;
list.forEach( el => {
if ( el.age === ob.age ){
i+=1;
if ( i === 1){
ob.message = el.message
}else{
// 1 正常实现
const it = JSON.stringify(ob)
const item = JSON.parse(JSON.stringify(ob))
// 2 存在地址引用问题
// const item = ob;
item.message = el.message
l.push(item);
}
}
})
return ob;
})
const arr = obj1.concat(l)
const arr1 = _.sortBy(arr, [ 'name' , 'age' ])
console.log(arr1);