将对象属性从一个数组映射到另一个数组

时间:2015-06-02 22:38:52

标签: javascript arrays

我有两个数组(我称之为thing1thing2),长度相同,但元素的顺序不同。

根据与每个元素关联的目标和源名称,元素可以相互匹配。

下面列出了每个匹配元素的示例:

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的新手,我还没有能够弄清楚如何匹配源名称和目标名称。

有人能给我一个所需语法的例子吗?

2 个答案:

答案 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;
    })

这种方法的优点可能在于它更具说明性,因为您甚至不必考虑管理索引。您所做的就是声明关联规则,内置函数为您管理索引详细信息。它确实具有最终确定失败的搜索案例的附加功能。