使用 Lodash 从键值对数组中创建对象
Posted
技术标签:
【中文标题】使用 Lodash 从键值对数组中创建对象【英文标题】:Make object from an array of key-value pairs using Lodash 【发布时间】:2018-05-13 23:17:00 【问题描述】:我正在使用 Lodash 从数组中创建一个对象,但结果不是我所期望的。代码如下:
var _ = require('lodash');
var data = [
[ 'creds', 'ZHRyYWhlZMMKDWhzYW5EaG1hZDE=' ],
[ 'loggedIn', true ],
];
var result = _.zipObject(data);
现在结果是:
creds,ZHRyYWhlZMMKDWhzYW5EaG1hZDE=: undefined, loggedIn,true: undefined
但我需要的是:
'creds':'ZHRyYWhlZMMKDWhzYW5EaG1hZDE=', 'loggedIn':true
【问题讨论】:
你在requre('lodash')
有一个错字。
【参考方案1】:
你也可以使用reduce
result = data.reduce((a, b, i) => (a = i == 1 ?
[a[0]]: a[1]
: a, a[b[0]] = b[1], a));
演示
var data = [
['creds', 'ZHRyYWhlZMMKDWhzYW5EaG1hZDE='],
['loggedIn', true]
];
result = data.reduce((a, b, i) => (a = i == 1 ?
[a[0]]: a[1]
: a, a[b[0]] = b[1], a));
console.log(result);
【讨论】:
【参考方案2】:使用 lodash 的 _.fromPairs
:
var result = _.fromPairs(data);
【讨论】:
这个比较简单。【参考方案3】:你已经接近了!唯一的区别是_.zipObject
需要两个不同的参数(一个用于键,一个用于值),而不是参数数组。
但是您应该可以通过在 _.zipObject
方法上使用 .apply
来做到这一点:
_.zipObject.apply(null, data);
// Object creds: "loggedIn", "ZHRyYWhlZMMKDWhzYW5EaG1hZDE=": true
【讨论】:
【参考方案4】:您可以使用array#reduce
从您的数组中获取对象。
var data = [ [ 'creds', 'ZHRyYWhlZMMKDWhzYW5EaG1hZDE=' ],[ 'loggedIn', true ] ];
var obj = data.reduce((o, [k,v]) => (o[k] = v, o), );
console.log(obj);
【讨论】:
以上是关于使用 Lodash 从键值对数组中创建对象的主要内容,如果未能解决你的问题,请参考以下文章