使用 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 从键值对数组中创建对象的主要内容,如果未能解决你的问题,请参考以下文章

如何从键值对列表中创建 Spark Row

根据嵌套键值对对象数组进行排序的最快方法

SQL - 从键值对中提取值到数组

根据指定的键从集合中创建键值对集合

有没有办法在 Bash 脚本中创建键值对?

Lodash合并数组与字典对象键值