先来想一个问题,如果我想让一个对象中的两个属性更换位置,怎么办?
思路:对我而言,直接在当前对象中调换位置,那我得花些功夫,不如换成一个空的对象,手动给该对象添加属性,来达到更换位置的效果。
来看一个场景题:
// 有以下js数组,实现按:"surname"+"name"+"address"按升序排序
let data = [
{ name: '一山', surname: '张', address: '西藏', area: '北京' },
{ name: '尚山', surname: '利', address: '厦门', area: '北京' },
{ name: '三山', surname: '李', address: '北京', area: '北京' },
{ name: '一山', surname: '王', address: '宁夏', area: '北京' },
{ name: '散山', surname: '张', address: '福建', area: '北京' }
]
我的解法:
let arr = []
data.map(item => {
let obj = { surname: item.surname, name: item.name, address: item.address } // 手动按序添加属性
arr.push(obj)
})
console.log(arr);
该解法只适合数据量不大的情况,对于需要调整多个属性位置的情况,暂时没有更好的解决办法
——————————————————————分割线_________________________________
更新: 2022年8月30号
今天发现js有个关键字叫做 delete , 在function 中,可以通过 delete + 属性名, 删除对象中的属性。
于是,新的思路就有了:先把name的值给到surname,再删除name,然后再给name赋值,相当于创建了属性name。这样也能实现name和surname的值互相调换(虽然和原来的题意有那么一丢丢的区别)