是否可以转换
[[35, "Bill"], [20, "Nancy"], [27, "Joan"]]
到
{"Bill": 35, "Nancy": 20, "Joan": 27}
使用.map()
或.reduce()
方法?
我可以使用以下方法转换数组:
const arr = [[35, "Bill"], [20, "Nancy"], [27, "Joan"]];
let obj = {};
for (let item of arr) {
obj[item[1]] = item[0];
}
console.log(obj);
但是我使用map
或reduce
进行此操作的尝试失败了。有什么想法吗?
答案 0 :(得分:5)
是的,您可以使用reduce
-在每次迭代中,从数组中提取两项(作为键和值),将值分配给累加器中的相应键,然后返回累加器:< / p>
const input = [[35, "Bill"], [20, "Nancy"], [27, "Joan"]];
const obj = input.reduce((a, [val, key]) => {
a[key] = val;
return a;
}, {});
console.log(obj);
答案 1 :(得分:3)
使用Array.map()
创建对象数组,每个对象包含一个键/值。通过spreading合并到Object.assign()
将它们组合为单个对象:
const arr = [[35, "Bill"], [20, "Nancy"], [27, "Joan"]];
const obj = Object.assign(...arr.map(([v, k]) => ({ [k]: v })));
console.log(obj);
如果您需要将该对象用作字典,则更好的解决方案是将元组数组转换为Map:
const arr = [[35, "Bill"], [20, "Nancy"], [27, "Joan"]];
const map = new Map(arr.map(([v, k]) => [k, v]));
console.log(map.get('Bill'));
答案 2 :(得分:2)
您可以映射新对象的项目,然后使用Object.assign
将所有对象分配给单个对象。
var array = [[35, "Bill"], [20, "Nancy"], [27, "Joan"]],
object = Object.assign(...array.map(([v, k]) => ({ [k]: v })));
console.log(object);
答案 3 :(得分:0)
您可以将reduce
与Object.assign
一起使用:
let array = [[35, "Bill"], [20, "Nancy"], [27, "Joan"]];
let result = array.reduce((acc, [value, key]) => Object.assign(acc, { [key]: value }), {});
console.log(result);