使用Lodash从一组键值对中创建对象

时间:2017-11-30 05:28:33

标签: javascript arrays json node.js lodash

我使用lodash从数组创建对象但结果不是预期的.. 这是代码:

var _ = requre('lodash')
var data = [ [ 'creds', 'ZHRyYWhlZMMKDWhzYW5EaG1hZDE=' ],[ 'loggedIn', true ] ];
var result = _.zipObject(data);

现在的结果是:

{creds,ZHRyYWhlZMMKDWhzYW5EaG1hZDE=: undefined, loggedIn,true: undefined}

但我需要的是:

{'creds':'ZHRyYWhlZMMKDWhzYW5EaG1hZDE=', 'loggedIn':true}

请帮助: - )

4 个答案:

答案 0 :(得分:7)

使用lodash' _.fromPairs

var result = _.fromPairs(data);

答案 1 :(得分:1)

您也可以使用reduce

result = data.reduce((a, b, i) => (a = i == 1 ? {
  [a[0]]: a[1]
} : a, a[b[0]] = b[1], a));

<强>演示

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 2 :(得分:1)

你很亲密!唯一的区别是_.zipObject需要两个不同的参数(一个用于键,一个用于值),而不是参数数组。

但您可以使用.apply方法_.zipObject来执行此操作:

_.zipObject.apply(null, data);
// Object { creds: "loggedIn", "ZHRyYWhlZMMKDWhzYW5EaG1hZDE=": true }

答案 3 :(得分:1)

您可以使用array#reduce从阵列中获取对象。

&#13;
&#13;
var data = [ [ 'creds', 'ZHRyYWhlZMMKDWhzYW5EaG1hZDE=' ],[ 'loggedIn', true ] ];
var obj = data.reduce((o, [k,v]) => (o[k] = v, o), {});
console.log(obj);
&#13;
&#13;
&#13;