lodash使用对象数组中的值从一个对象映射键

时间:2016-09-29 15:24:11

标签: arrays node.js underscore.js lodash

我有以下对象:

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循环。

2 个答案:

答案 0 :(得分:2)

这是使用lodash的解决方案:

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

zipObject创建一个给定一组键和一组值的对象。我们从kmap获取的密钥和值来自incoming

&#13;
&#13;
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);
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

<p>
  <pre id="result"></pre>
</p>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

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

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