【问题标题】:How do you compare two object values in two separate arrays using Javascript (JS)?如何使用 Javascript (JS) 比较两个单独数组中的两个对象值?
【发布时间】:2017-11-07 01:46:30
【问题描述】:

假设我有两个用对象填充的数组,它们具有多个属性,并且有一些相同的键。

        var array1 = [
          {name: "Jim", city: 'Toronto', id:'1281732'},
          {name: "Alex", city: 'New York', id:'32423'},
          {name: "Simon", city: 'San Francisco', id:'234234'},
          {name: "Jake", city: 'Milwaukee', id:'1282342341732'}
        ]

        var array2 = [
          {name: "Joey", city: 'Raleigh'},
          {name: "Alex", city: 'New York'},
          {name: "Lee", city: 'San Diego'},
          {name: "Jake", city: 'Milwaukee'}
        ]

如何通过比较名称和城市来发现 array1 中的第二个和第四个对象也在 array2 中。这意味着两个对象键必须匹配,然后从 array1 中取出重复的对象并推入一个新数组。

使用 lodash 或下划线是可以接受的。

【问题讨论】:

  • 请先尝试解决方案,然后再询问如何操作。这不是一个编码即服务平台。
  • 是的,我同意@WilomGfx。嵌套循环是您可以先尝试的提示。

标签: javascript jquery underscore.js lodash


【解决方案1】:

与所有编程任务一样,您要做的就是仔细思考问题并提出有意义的解决方案。在这种情况下,在第二个数组中搜索第一个数组中的每个项目可以通过迭代第一个数组来完成,并且在每次迭代时,迭代第二个数组直到找到匹配项。

var array1 = [
  {name: "Jim", city: 'Toronto', id:'1281732'},
  {name: "Alex", city: 'New York', id:'32423'},
  {name: "Simon", city: 'San Francisco', id:'234234'},
  {name: "Jake", city: 'Milwaukee', id:'1282342341732'}
]

var array2 = [
  {name: "Joey", city: 'Raleigh'},
  {name: "Alex", city: 'New York'},
  {name: "Lee", city: 'San Diego'},
  {name: "Jake", city: 'Milwaukee'}
]

var result = [];

for (var i = 0; i < array1.length; i++) {
  for (var j = 0; j < array2.length; j++) {
    if (array1[i].name == array2[j].name &&
        array1[i].city == array2[j].city) {
      result.push(array1[i]);
      break;
    }
  }
}

console.log(result);

现代语法对其进行了一些清理。

var array1 = [
  {name: "Jim", city: 'Toronto', id:'1281732'},
  {name: "Alex", city: 'New York', id:'32423'},
  {name: "Simon", city: 'San Francisco', id:'234234'},
  {name: "Jake", city: 'Milwaukee', id:'1282342341732'}
]

var array2 = [
  {name: "Joey", city: 'Raleigh'},
  {name: "Alex", city: 'New York'},
  {name: "Lee", city: 'San Diego'},
  {name: "Jake", city: 'Milwaukee'}
]

var result = array1.filter(({name, city}) =>
  array2.some(o => o.name == name && o.city == city)
);

console.log(result);

【讨论】:

    【解决方案2】:

    为了获得两个数组中的结果,您也可以简单地使用filter() 函数

     var array1 = [
              {name: "Jim", city: 'Toronto', id:'1281732'},
              {name: "Alex", city: 'New York', id:'32423'},
              {name: "Simon", city: 'San Francisco', id:'234234'},
              {name: "Jake", city: 'Milwaukee', id:'1282342341732'}
            ]
    
            var array2 = [
              {name: "Joey", city: 'Raleigh'},
              {name: "Alex", city: 'New York'},
              {name: "Lee", city: 'San Diego'},
              {name: "Jake", city: 'Milwaukee'}
            ]
            
     var array3 = array1.filter(row1 => array2.filter(row2 => row1.name == row2.name && row1.city == row2.city).length > 0);
    
    console.log(array3);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多