我有以下对象:
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;
}
如何使用lodash
或underscore
执行此操作。内置方法会更好,不想做for
循环。
答案 0 :(得分:2)
这是使用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);
&#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;
答案 1 :(得分:0)
您可以将它们与以下功能结合使用:
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;