场景是这样的:
得到后端返回的数据,有个字段是id。前端有个组件,传值过去支持的是uid,所以我想要把id改为uid
试了这样写没变化,问题出在哪了呢
let arr = [
{
id:1,
name:"mincoo"
},
{
id:2,
name:"nxm"
}
];
let newArr = arr.map(o=>{
for(let key in o){
if(key == 'id'){
key = 'uid';
}
}
return o;
});
console.log(newArr)
###个人比较习惯这样,
缺点是会保留就的属性,优点是比较省心
arr = arr.map(item => ({
...item,
uid: item.id,
}))
###新增一个uid = id, 然后把id delete了
###这种要求,除了增加内存消耗外,没有特别的意义,其实不建议进行特别处理。
你的代码问题在于没有理解js对象中属性名一旦确定,就不可删除,而且字符串在js中其实是不可变的。
###因为字符串的不可变性。
这样改吧:
let newArr = arr.map(o => {
return Object.assign(o, { uid: o.id });
});
方法不唯一。
###let arr = [
{
id:1,
name:"mincoo"
},
{
id:2,
name:"nxm"
}
];
let newArr = arr.map(o=>{
var val = o.id
delete o.id
o.uid = val
return o;
});
console.log(newArr)
###新增一个UID字段就可以了!只要有这个字段就可以用了
###let arr = [
{
id: 1,
name: "mincoo"
},
{
id: 2,
name: "nxm"
}
];
console.log(arr.map(({ id: uid, ...o }) => ({ uid, ...o })))
###arr.map(({id, name}) => (({uid: id, name})))
arr = JSON.parse(JSON.stringify(arr).replace(/"id"/g,'"uid"'))