繁体   English   中英

如何使用 object 中的键比较 JavaScript 中对象的两个 arrays

[英]How to compare two arrays of objects in JavaScript using a key in object

如何使用 object 中的键比较 JavaScript 中对象的两个 arrays。我有两个这样的结果集。 是否可以在 JavaScript 中做这样的事情? 还是洛达什?

    // Array 1
        [
            { Id: "0", display: "Jamsheer 1" },
            { Id: "3", display: "Muhammed 1" },
        ]
    
    // Array 2
        [
            { Id: "0", display: "Jamsheer" },
            { Id: "1", display: "Muhammed" },
            { Id: "2", display: "Ravi" },
            { Id: "3", display: "Ajmal" },
            { Id: "4", display: "Ryan" }
        ]
    
    
    The final result I need is - same id in array 2 should be replaced with corresponding id in array 1 – the final result should be like this:
    
    [
            { Id: "0", display: "Jamsheer 1" },
            { Id: "1", display: "Muhammed" },
            { Id: "2", display: "Ravi" },
            { Id: "3", display: "Ajmal 1" },
            { Id: "4", display: "Ryan" }
        ]

您可以从您的 arr1 创建一个Map ,它由 object Id键控,并将每个 object 的显示存储为其值。 map 将具有以下形状:

{
  "0" => "Jamsheer 1"
  "3" => "Muhammed 1"
}

然后,您可以在arr2上使用.map()来更改给定 object 的显示属性,如果它的Id出现在您创建的 Map 中。 如果确实出现了Id ,则从 Map 中获取值并将其用作显示,如果它不使用 object 的原始显示值。

请参见下面的示例:

 const arr1 = [{ Id: "0", display: "Jamsheer 1" }, { Id: "3", display: "Muhammed 1" },]; const arr2 = [{ Id: "0", display: "Jamsheer" }, { Id: "1", display: "Muhammed" }, { Id: "2", display: "Ravi" }, { Id: "3", display: "Ajmal" }, { Id: "4", display: "Ryan" }]; const arr1Map = new Map(arr1.map(o => [o.Id, o.display])); const res = arr2.map(({Id, display}) => ({ Id, display: arr1Map.get(Id) || display })); console.log(res);
 .as-console-wrapper { max-height: 100%;important: top; 0; } /* ignore */

如果除了display之外还有其他属性,则可以将对象存储在 map 中:

 const arr1 = [{ Id: "0", display: "Jamsheer 1", foo: 1, bar:2 }, { Id: "3", display: "Muhammed 1", baz: 3 },]; const arr2 = [{ Id: "0", display: "Jamsheer" }, { Id: "1", display: "Muhammed" }, { Id: "2", display: "Ravi" }, { Id: "3", display: "Ajmal" }, { Id: "4", display: "Ryan" }]; const arr1Map = new Map(arr1.map(o => [o.Id, o])); const res = arr2.map(o => arr1Map.get(o.Id) || o); console.log(res);
 .as-console-wrapper { max-height: 100%;important: top; 0; } /* ignore */

尝试这个

 var arr1 = [ { Id: "0", display: "Jamsheer 1" }, { Id: "3", display: "Muhammed 1" }, ] var arr2 = [ { Id: "0", display: "Jamsheer" }, { Id: "1", display: "Muhammed" }, { Id: "2", display: "Ravi" }, { Id: "3", display: "Ajmal" }, { Id: "4", display: "Ryan" } ] function comparer(otherArray){ return function (current) { return otherArray.filter(function(other) { return other.Id === current.Id }).length===0; } } var compArray = arr2.filter(comparer(arr1)); compArray.map(i=> arr2.push(i)); console.log(arr2);

您可以在lodash上使用_.concat()_.unionWith()函数

var array = [1];
var other = _.concat(array, 2, [3], [[4]]);
 
console.log(other);
// => [1, 2, 3, [4]]
 
console.log(array);
// => [1]


var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
 
_.unionWith(objects, others, _.isEqual);
// => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]

暂无
暂无

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

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