使用Map将2D数组转换为对象或在JavaScript中进行归约

时间:2018-10-04 21:06:09

标签: javascript arrays

是否可以转换

[[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);

但是我使用mapreduce进行此操作的尝试失败了。有什么想法吗?

4 个答案:

答案 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)

您可以将reduceObject.assign一起使用:

let array = [[35, "Bill"], [20, "Nancy"], [27, "Joan"]];
    
let result = array.reduce((acc, [value, key]) => Object.assign(acc, { [key]: value }), {});
    
console.log(result);