JS过滤器方法在分配给变量时返回空数组

时间:2016-10-25 12:50:55

标签: javascript

我有以下代码:

var test1 = [
  {
   id: 1
  },
  {
   id: 2
  },
  {
   id: 3
  },
];

var test2 = [
  {
   id: 3,
   text: 'some other text 3'
  },
  {
   id: 2,
   text: 'some other text 2'
  }
];

// filter method
function getNewArray(val) {
  test2.filter(function(val2){
    if(val.id == val2.id){
       return (val2.text);
       }
  });
}
var data1 =  test1.filter(getNewArray);

console.log(data1);

返回一个空数组

如果我删除" console.log(data1)"我修改代码如下:

function getNewArray(val) {
  test2.filter(function(val2){
    if(val.id == val2.id){
       console.log(val2.text);
       }
  });
}

我得到了理想的结果。

为什么data1为空?

1 个答案:

答案 0 :(得分:4)

您无法使用filter()方法,而是可以使用reduce()forEach()并返回数组作为结果。

var test1 = [{
  id: 1,
  text: 'some text'
}, {
  id: 2,
  text: 'some text 2'
}, {
  id: 3,
  text: 'some text 3'
}, ];

var test2 = [{
  id: 3,
  text: 'some other text 3'
}, {
  id: 2,
  text: 'some other text 2'
}];

function getNewArray(r, val) {
  test2.forEach(function(val2) {
    if (val.id == val2.id) {
      r.push(val2.text);
    }
  });
  return r;
}
var data1 = test1.reduce(getNewArray, []);

console.log(data1);