【问题标题】:Make object from an array of key-value pairs using Lodash使用 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')有一个错字。

标签: javascript arrays json node.js 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);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-08
        • 1970-01-01
        • 2018-11-24
        • 1970-01-01
        • 1970-01-01
        • 2021-08-25
        相关资源
        最近更新 更多