实现功能:对于一个数组对象,该数组中对象已按照对象的属性name进行排序。现在需要实现,name属性相同的值只保留第一个并且赋予新的属性flag为1,否则,将name属性置位空,并且flag属性为0.
传入属性
userss: [
{
name: '1',
code: '2',
},
{
name: '1',
code: 'ff',
},
{
name: '2',
code: 'fff',
},
{
name: '3',
code: 'ffff',
}
]
调用方法:
{{userss|a}}
原本实现的方法:
a(user) {
let users = user;
let nameOld = '';
for (let i = 0; i < users.length; i++) {
if (i == 0) {
nameOld = users[i].name;
users[i].flag = 1;
} else {
if (nameOld == users[i].name) {
users[i].name = '';
users[i].flag = 0;
} else {
nameOld = users[i].name;
users[i].flag = 1;
}
}
}
return users;
}
通过上述方式实现功能时,出现问题:就是name属性为空的对象flag为1.并且方法a()实现了两次
将方法中的赋值改为
let users = JSON.parse(JSON.stringify(user));
就可以了。
问题出在数组对象的深浅拷贝中。但是具体原因我还是不太了解,希望有比较了解的大神可以给讲解一下。就当是一次错误记录吧。