将数组转换为对象

用户8128576

我将如何处理使用 javascript 将数组数组转换为对象数组的任务?例如

[
     [
          [a,b],[c,d],[e,f]
     ],
     [
          [g,h],[i,j],[k,l]
     ]
]

--->

[
     {a:b, c:d, e:f}, {g:h, i:j, k:l}
]
谢谢

功能数据转换mapreduce

您可以使用mapreduce实现所需的数据形状

const data = [
  [ ['a', 1], ['b', 2], ['c', 3] ],
  [ ['d', 4], ['e', 5], ['f', 6] ]
]

const data2 = data.map(pairs =>
  pairs.reduce((obj, [k,v]) =>
    Object.assign(obj, { [k]: v }), {}))
    
console.log(data2)
// [ { a: 1, b: 2, c: 3 }, { d: 4, e: 5, f: 6 } ]


通用函数

上述转换是认知致密,可以分解成两个有用的功能-这两个功能mapReducerpair2obj是通用的,以至于我们可以很容易地重新使用他们在我们的程序的其他部分

const mapReducer = (f, g) =>
  (acc, x) => f (acc, g (x))

const pair2obj = ([x, y]) =>
  ({ [x]: y })

const data = [
  [ ['a', 1], ['b', 2], ['c', 3] ],
  [ ['d', 4], ['e', 5], ['f', 6] ]
]

const data2 = data.map (pairs =>
  pairs.reduce(mapReducer(Object.assign, pair2obj), {}))

console.log(data2)
// [ { a: 1, b: 2, c: 3 }, { d: 4, e: 5, f: 6 } ]


本国的 Map

如果您可以Map在程序中使用对象,这可能会更好,因为您的数据已经是Map构造函数接受的格式

const data = [
  [
    ['a',1],['b',2],['c',3]
  ],
  [
    ['d',4],['e',5],['f',6]
  ]
]

const data2 = data.map(pairs => new Map(pairs))

console.log(data2[0].get('a')) // 1
console.log(data2[0].get('b')) // 2
console.log(data2[0].get('c')) // 3
console.log(data2[1].get('d')) // 4
console.log(data2[1].get('e')) // 5
console.log(data2[1].get('f')) // 6

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章