【问题标题】:How to map two arrays in my case [duplicate]在我的情况下如何映射两个数组[重复]
【发布时间】:2016-06-14 20:36:02
【问题描述】:

我正在尝试映射两个数组并在我的代码中创建一个全新的数组

我有类似的东西

var array1 =[
   {'name':'John'
    'id': '1'},
   {'name':'Ted'
    'id': '2'},
   {'name':'KK'
    'id': '3'}
];
var array2 =[1, 2]; 

var info = [];    

for (var i = 0; i <array2.length; i++){
    var id = array2[i];
    var p = array1.filter(function(person){
          return id === person.id
     })

     info.push(p)
}

我希望我的 info 数组包含 John 和 Ted 之类的

[ 
   {'name':'John'
    'id': '1'},
   {'name':'Ted'
    'id': '2'}
]

但是,我得到了

[ 
   [ 
       {'name':'John'
       'id': '1'}
   ],
   [
      {'name':'Ted'
      'id': '2'}
   ]
]

我不确定我做错了什么。无论如何我可以改进我的代码以使其更充分吗?非常感谢!

【问题讨论】:

  • 你应该修正花哨的引号
  • 您的代码是由内而外的。在filter 中循环array2,或者更好地使用indexOfsome

标签: javascript arrays


【解决方案1】:

你不应该push 而应该concat,因为你从filter 得到的p 已经是一个数组。所以改变:

info.push(p)

到:

info = info.concat(p)

其次,你是在比较字符串和数字,所以改变:

var array2 = [1, 2]; 

到:

var array2 = ['1', '2']; 

或者,将id 值更改为数字。下面的 sn-p 做到了这一点,并且还通过使用Array.prototype.indexOf 使代码更加简洁:

var array1 =[
   {'name':'John', 'id': 1},
   {'name':'Ted',  'id': 2},
   {'name':'KK',   'id': 3}
];
var array2 = [1, 2];
var info = array1.filter(function (person) {
    return array2.indexOf(person.id) !== -1;
});   
console.log(info);    

【讨论】:

  • 谢谢,但 concat 似乎没有这样做。在我将其更改为 concat +1 后,信息变为空数组
  • return id === person.id更改为return id == person.id
  • @abM 仍然不起作用
  • @FlyingCat,你检查了 sn-p 吗?它对我有用......还是我误解了什么?
  • 就是这样。非常感谢!
【解决方案2】:

您将p 推送到info 数组,但不是每个人对象。此外,您还有语法错误。 @trincot 的回答中指出了其他一些编码错误。

var array1 =[
   {name: 'John', id: 1},
   {name: 'Ted', id: 2},
   {name: 'KK', id: 3}
], array2 = [1, 2]; 

var info = [];  
for (var i = 0, b = array2.length; i < b; i++) {
    var id = array2[i];
    array1.filter(function(person) {
        if(id === person.id) {
            info.push(person);
            return true; // breaks the filter
        }
    });
}

【讨论】:

    猜你喜欢
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2011-06-14
    • 1970-01-01
    相关资源
    最近更新 更多