const arr = [
{
name: 'd',
value: 'aaa',
},
{
name: 'a',
value: 'bbb',
},
{
name: 'b',
value: 'ccc',
},
{
name: 'c',
value: 'ddd',
},
]
如何得到:
{
'aaa': 0,
'bbb': 1,
'ccc': 2,
'ddd': 3,
}
不用关注键 name,只需保证 value 的顺序。在结果中 value 作为 key,其值对应所在对象在 arr 中的键。
现在这么做:
const map = {}
arr.forEach(({value}, index) => map[value] = index);
console.log(map); // { aaa: 0, bbb: 1, ccc: 2, ddd: 3 }
或者
function invertKeyValues(obj) {
return Object.keys(obj).reduce((acc, key) => {
acc[obj[key]] = key;
return acc;
}, {});
}
const res = invertKeyValues(
Object.fromEntries(Object.entries(Array.from(arr, (item) => item.value)))
);
console.log(res); // { aaa: '0', bbb: '1', ccc: '2', ddd: '3' }
请问这样做会很慢吗?有优雅的办法吗?
又来数组转对象?
哦,错了,你要的是值和序号,