如果您实际上有两个这样的 JavaScript 对象数组:
var a1 = [
{page: '1', tags: ['foo', 'bar']},
{page: '2', tags: ['oh', 'boy']},
//...
];
var a2 = [
{page: '1', tags: ['go', 'out']},
{page: '9b', tags: ['red', 'blue', 'green']},
//...
];
然后我会转换a2
为一个页面到标签的查找表:
var lookup = { }, i, e;
for(i = 0, e = a2[i]; i < a2.length; e = a2[++i])
lookup[e.page] = e.tags;
然后在进行时通过a1
合并lookup
值旋转:
for(i = 0, e = a1[i]; i < a1.length; e = a1[++i])
e.tags = lookup[e.page] || e.tags;
演示:http: //jsfiddle.net/ambiguous/aDgH7/
_.reduce
如果你必须使用下划线,你可以用and替换循环_.each
:
var lookup = _(a2).reduce(function(lookup, e) {
lookup[e.page] = e.tags;
return lookup;
}, { });
_(a1).each(function(e) {
e.tags = lookup[e.page] || e.tags;
});
演示:http: //jsfiddle.net/ambiguous/rkMZz/
如果你可以假设一个现代的 JavaScript,那么可以使用标准reduce
和forEach
数组方法:
var lookup = a2.reduce(function(lookup, e) {
lookup[e.page] = e.tags;
return lookup;
}, { });
a1.forEach(function(e) {
e.tags = lookup[e.page] || e.tags;
});
演示:http: //jsfiddle.net/ambiguous/cy2Qy/
如果您实际上有 JSON 字符串数组,那么您可以混合JSON.parse
并JSON.stringify
调用来解包和重新打包数据。