我有两个数组(我称之为thing1
和thing2
),长度相同,但元素的顺序不同。
根据与每个元素关联的目标和源名称,元素可以相互匹配。
下面列出了每个匹配元素的示例:
thing1[0].target
Object {
name: "Benthopelagics, large", parent: Object, imports: Array[7], TL: 3.717611213, B: 0.2…
}
thing1[0].source
Object {
name: "Outside", parent: Object, imports: Array[4], TL: 5.149219037, B: 0…
}
thing2[216]
Object {source: "Benthopelagics, large", target: "Outside", value: 0.05800000596}
我想复制"值"从thing2到thing1的字段,但作为JavaScript的新手,我还没有能够弄清楚如何匹配源名称和目标名称。
有人能给我一个所需语法的例子吗?
答案 0 :(得分:1)
循环通过thing2。对于thing2的每次迭代,循环遍历thing1并搜索匹配的对象属性。
(Demo)
for(var i = 0, j = thing2.length; i < j; i++) {
for(var k = 0, l = thing1.length; k < l; k++) {
if( thing1[k].source.name == thing2[i].source &&
thing1[k].target.name == thing2[i].target) {
thing1[k].value = thing2[i].value;
}
}
}
答案 1 :(得分:1)
相比之下,这是一种更具功能性的编程方式......
thing1.forEach(function (d1, i1, a1) {
var res = thing2.filter(function (d2, i2, a2) {
return d1.source.name === d2.source && d1.target.name === d2.target
});
d1.value = res.length ? res[0].value : null;
})
这种方法的优点可能在于它更具说明性,因为您甚至不必考虑管理索引。您所做的就是声明关联规则,内置函数为您管理索引详细信息。它确实具有最终确定失败的搜索案例的附加功能。