【问题标题】:Construct Object From Two Arrays从两个数组构造对象
【发布时间】:2018-02-16 00:40:57
【问题描述】:

我有两个列表要组合为键值对:

keys = ['Jan 2016', 'Feb 2016', 'Mar 2016'];

values = ['janData', 'febData', 'marData'];

我想要的结果是:

dataMap = {
    'Jan 2016': 'janData',
    'Feb 2016': 'febData',
    'Mar 2016': 'marData'
};

我查看了In Javascript a dictionary comprehension, or an Object `map`,发现在给定现有数组的情况下,可以使用.reduce()assign() 构建对象。但是,当我有 两个 数组时,我无法弄清楚如何调整这些方法。

问题:如何从两个现有数组构造我的dataMap 对象?

近年来,对象理解似乎得到了一些更新。 assign() 似乎很新,但也许它不是我任务的最佳工具。另外,我只使用原生 javascript。

【问题讨论】:

  • 我想像这样使用 reduce:var dataMap = keys.reduce((accumulator, currentValue, currentIndex) => { accumulator[currentValue] = values[currentIndex] }, {})
  • 你真的应该尝试 lodash 来做这样的事情:_.fromPairs(_.zip(keys, values))

标签: javascript


【解决方案1】:

使用函数forEach

var keys = ['Jan 2016', 'Feb 2016', 'Mar 2016'];
var values = ['janData', 'febData', 'marData'];

let result = {};
keys.forEach((k, i) => result[k] = values[i]);

console.log(result);

你可以初始化一个Map对象:

地图构造函数

一个数组或其他可迭代对象,其元素是键值对(具有两个元素的数组,例如[[ 1, 'one' ],[ 2, 'two' ]])。每个键值对都被添加到新的 Map 中; null 值被视为未定义。

var keys = ['Jan 2016', 'Feb 2016', 'Mar 2016'];
var values = ['janData', 'febData', 'marData'];

let result = new Map(keys.map((k, i) => [[k], values[i]]));

for (let key of result.keys()) {
  console.log(`${key} = ${result.get(key)}`);
}

资源

【讨论】:

    【解决方案2】:

    您可以使用 ArrayforEach() 执行以下操作:

    var keys = ['Jan 2016', 'Feb 2016', 'Mar 2016'];
    var values = ['janData', 'febData', 'marData'];
    var dataMap = {};
    keys.forEach(function(k, i){
      dataMap[k] = values[i];
    })
    
    console.log(dataMap);

    【讨论】:

      【解决方案3】:
      let dataMap = {}
      
      for (let month in keys) {
          const _key = keys[month]
          dataMap[_key] = values[month]
      }
      

      此答案取决于您的数组是否处于“相同”顺序

      【讨论】:

        【解决方案4】:

        我知道这里已经有很多非常好的答案,但是如果您想要更“函数式编程”的方法,可以采用另一种方法:

        const keys = ['Jan 2016', 'Feb 2016', 'Mar 2016'];
        const values = ['janData', 'febData', 'marData'];
        const dataMap = keys.map((key, i) => ({
            [key]: values[i]
          }))
          .reduce((key, val) => Object.assign({}, key, val), {});

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-11-14
          • 1970-01-01
          • 2014-07-21
          • 1970-01-01
          • 2015-12-13
          • 2022-08-19
          • 2020-10-30
          • 2014-11-19
          相关资源
          最近更新 更多