是否可以转换为
[[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
来做这件事的尝试失败了。有什么想法吗?
发布于 2018-10-05 05:08:58
如果支持,可以使用Object.fromEntries()
将[key, value]
对数组转换为对象。在本例中,对是[value, key]
,因此我们需要首先将它们映射到[key, value]
对的数组。
const arr = [[35, "Bill"], [20, "Nancy"], [27, "Joan"]];
const obj = Object.fromEntries(arr.map(([v, k]) => [k, v]));
console.log(obj);
使用Array.map()
创建一个对象数组,其中每个对象包含一个键/值。在Object.assign()
中通过spreading将它们组合成一个对象
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'));
发布于 2018-10-05 05:07:58
可以,您可以在每次迭代中使用reduce
-从数组中提取两个项(作为键和值),将值赋给累加器中的相应键,然后返回累加器:
const input = [[35, "Bill"], [20, "Nancy"], [27, "Joan"]];
const obj = input.reduce((a, [val, key]) => {
a[key] = val;
return a;
}, {});
console.log(obj);
发布于 2018-10-05 05:09:29
您可以映射新对象的项,并使用Object.assign
将所有项指定给单个对象。
var array = [[35, "Bill"], [20, "Nancy"], [27, "Joan"]],
object = Object.assign(...array.map(([v, k]) => ({ [k]: v })));
console.log(object);
https://stackoverflow.com/questions/52655148
复制相似问题