【问题标题】:lodash Mapping Keys from one object with values in array of objectslodash 使用对象数组中的值从一个对象映射键
【发布时间】:2017-02-08 00:22:33
【问题描述】:

我有以下对象:

var kmap={
    key1:"useless",
    key2:"useless",
    key3:"useless"
};

我需要用这个对象数组的值来映射它的键:

var incoming=[
    {value:"asd"},
    {value:"qwe"},
    {value:"zxc"}
];

结果:

{
    key1:"asd",
    key2:"qwe",
    key3:"zxc",
}

这是我现在的做法:

var result={};

var keys=Object.keys(kmap);

for(var i=0;i<incoming.length;i++)
{
    result[keys[i]]=incoming[i].value;
}

如何使用lodashunderscore 来实现。内置方法会更好,不要做for循环。

【问题讨论】:

  • 哦,来吧!为什么投反对票?

标签: arrays node.js underscore.js lodash


【解决方案1】:

这是一个使用 lodash 的解决方案:

var result = _.zipObject(_.keys(kmap), _.map(incoming, 'value'))

zipObject 在给定键数组和值数组的情况下创建一个对象。我们从kmap 获得的键和值是从incoming 中提取的。

var kmap={
    key1:"useless",
    key2:"useless",
    key3:"useless"
};

var incoming=[
    {value:"asd"},
    {value:"qwe"},
    {value:"zxc"}
];

var result = _.zipObject(_.keys(kmap), _.map(incoming, 'value'))

document.getElementById('result').textContent = JSON.stringify(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

<p>
  <pre id="result"></pre>
</p>

【讨论】:

    【解决方案2】:

    您可以将它们与以下功能结合使用:

    var kmap={
        key1:"useless",
        key2:"useless",
        key3:"useless"
       
    };
    
    var incoming=[
        {value:"asd"},
        {value:"qwe"},
        {value:"zxc"}
    ];
    
    function combine(obj1, obj2, propToTake) {
      return Object.keys(obj1).map(function(key, i) {
        return {
           [key]: obj2[i] ? obj2[i][propToTake] : undefined
        }
      });
    }
    
    console.log(combine(kmap, incoming, 'value'));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-08
      • 2016-05-31
      • 2018-05-13
      • 2019-04-28
      • 2023-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多