将二维数组转换为对象的好方法
Good ways to convert 2d array to object
使用 ES7 ES8,我可以将对象转换为数组数组,如下所示:
let obj = { a: '1', b: '2', c: '3' }
let arr = Object.entries(obj)
// [ [ 'a', '1' ], [ 'b', '2' ], [ 'c', '3' ] ]
但是如果我想反过来怎么办?我可以使用 for 循环,或者如下所示的 Array 的 reduce 方法,但是有更直接的方法吗?
let arr =[ [ 'a', '1' ], [ 'b', '2' ], [ 'c', '3' ] ]
let obj = arr.reduce((o, x)=>{o[x[0]]=x[1];return o}, {})
// { a: '1', b: '2', c: '3' }
一个用例:我想将像 "a=1;b=2;c=3"
这样的字符串转换为像 { a: '1', b: '2', c: '3' }
这样的对象,最后得到像
这样的东西
"a=1;b=2;c=3"
.split(";")
.reduce((o, x)=>{
let parts=x.split("=")
o[parts[0]]=parts[1]
return o
}, {});
编辑: 正如评论中所指出的,reduce 语法可以简化(或至少缩短)为:
arr.reduce((o, [k, v])=>(o[k]=v, o), {})
...或者用 Object.assign
写成这样:
arr.reduce((o, [k, v])=>Object.assign(o, {[k]: v}), {})
无论哪种方式,根据评论,问题的答案是否。这是我们得到的最佳方法。
你想要一些单行 unentries
功能吗?
const detries = entries => entries.reduce((result, [key, value]) => Object.assign(result, {[key]: value}), {});
const entries = Object.entries({a: 1, b: 2, c: 3});
const detried = detries(entries);
console.info("ENTRIES", entries);
console.info("DETRIED", detried);
编辑:Object.fromEntries
proposal.
您可能可以改用这个。
Object.fromEntries
is proposed to perform the reverse of Object.entries
: it accepts an iterable of key-value pairs and returns a new object whose own keys and corresponding values are given by those pairs.
Object.fromEntries([["apple", 0], ["banana", 1]]) // {apple: 0, banana: 1}
使用 ES7 ES8,我可以将对象转换为数组数组,如下所示:
let obj = { a: '1', b: '2', c: '3' }
let arr = Object.entries(obj)
// [ [ 'a', '1' ], [ 'b', '2' ], [ 'c', '3' ] ]
但是如果我想反过来怎么办?我可以使用 for 循环,或者如下所示的 Array 的 reduce 方法,但是有更直接的方法吗?
let arr =[ [ 'a', '1' ], [ 'b', '2' ], [ 'c', '3' ] ]
let obj = arr.reduce((o, x)=>{o[x[0]]=x[1];return o}, {})
// { a: '1', b: '2', c: '3' }
一个用例:我想将像 "a=1;b=2;c=3"
这样的字符串转换为像 { a: '1', b: '2', c: '3' }
这样的对象,最后得到像
"a=1;b=2;c=3"
.split(";")
.reduce((o, x)=>{
let parts=x.split("=")
o[parts[0]]=parts[1]
return o
}, {});
编辑: 正如评论中所指出的,reduce 语法可以简化(或至少缩短)为:
arr.reduce((o, [k, v])=>(o[k]=v, o), {})
...或者用 Object.assign
写成这样:
arr.reduce((o, [k, v])=>Object.assign(o, {[k]: v}), {})
无论哪种方式,根据评论,问题的答案是否。这是我们得到的最佳方法。
你想要一些单行 unentries
功能吗?
const detries = entries => entries.reduce((result, [key, value]) => Object.assign(result, {[key]: value}), {});
const entries = Object.entries({a: 1, b: 2, c: 3});
const detried = detries(entries);
console.info("ENTRIES", entries);
console.info("DETRIED", detried);
编辑:Object.fromEntries
proposal.
您可能可以改用这个。
Object.fromEntries
is proposed to perform the reverse ofObject.entries
: it accepts an iterable of key-value pairs and returns a new object whose own keys and corresponding values are given by those pairs.
Object.fromEntries([["apple", 0], ["banana", 1]]) // {apple: 0, banana: 1}