js如何修改数组对象里的属性名?

Codermin
  • 552

场景是这样的:
得到后端返回的数据,有个字段是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)
回复
阅读 2.5k
9 个回答

个人比较习惯这样,
缺点是会保留就的属性,优点是比较省心

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)

image.png

新增一个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"'))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏