繁体   English   中英

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

[英]Mapping object properties from one array to another

我有两个数组(我称它们为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的新手,我一直无法弄清楚如何进行源名称和目标名称的匹配。

有人可以举例说明所需的语法吗?

遍历thing2。 对于thing2的每次迭代,遍历thing1并搜索匹配的对象属性。

演示

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;
        }
    }
}

只是为了对比,这是一种更具功能性的编程类型的方法...

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

也许这种方法的优势在于它更具声明性,因为您甚至不必考虑管理索引。 您要做的就是声明关联规则,并且内置插件将为您管理索引详细信息。 它确实具有完成失败搜索案例的附加功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM