【问题标题】:Javascript compare key of dictionary in arraysJavascript比较数组中字典的键
【发布时间】:2021-04-18 16:31:30
【问题描述】:

我有两个数组,其中包含这样的字典:

var arr1 = [
    {id: 1, key1: "hello", key2: "world"},
    {id: 2, key1: "some", key2: "value"},
    {id: 3, key1: "...", key2: "..."}
]
var arr2 = [
    {id: 2, key1: "new", key2: "val"},
    {id: 5, key1: "...", key2: "..."}
]

我想创建一个循环,它采用arr1 的所有值,但如果那里存在 id,则采用 arr2 的值。结果如下所示:

var result = [
    {id: 1, key1: "hello", key2: "world"},
    {id: 2, key1: "new", key2: "val"},
    {id: 3, key1: "...", key2: "..."}
]

我已经用下面的循环进行了尝试,它应该检查arr2 是否包含arr1 中当前对象的id。这是有效的,当我的数组中只有 1 个条目具有匹配的 id 时。但是当有 2 个以上的匹配时,它就不再起作用了。

var result = []
arr1.map(val1 => {
    arr2.some(val2 => {
        val2.id === val1.id ? result.push(val2) : result.push(val1)
    })
})

【问题讨论】:

    标签: javascript arrays dictionary


    【解决方案1】:

    你可以用这个使用Array.prototype.reduce的单行来做到这一点

    var arr1 = [
        { id: 1, key1: "hello", key2: "world" },
        { id: 2, key1: "some", key2: "value" },
        { id: 3, key1: "...", key2: "..." }
    ];
    
    var arr2 = [
        { id: 2, key1: "new", key2: "val" },
        { id: 5, key1: "...", key2: "..." }
    ];
    
    const result = arr1.reduce((acc, cur) => [...acc, arr2.find(({ id }) => cur.id === id) || cur], []);
    
    console.log(result);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-03
      • 1970-01-01
      • 2020-03-05
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多