请教一下数组中filter方法的使用

新手上路,请多包涵
var arr = [
  {
    id: 1,
    name: '1'
  },
  {
    id: 2,
    name: '2'
  },
  {
    id: 3,
    name: '3'
  },
  {
    id: 4,
    name: '4'
  },
  {
    id: 5,
    name: '5'
  },
]

let tiaojian = ['3', '5']       // 条件数组

var temp = arr.filter(item => {
   for (let i = 0; i < tiaojian.length; i++) {
    if (tiaojian[i] !== item.name) {
      return true
    } else {
      return false
    }
  }
})
console.log(temp)
/*
   [ { id: 1, name: '1' },
  { id: 2, name: '2' },
  { id: 3, name: '3' },
  { id: 4, name: '4' },
  { id: 5, name: '5' } ]
*/

如上面的代码所示,我想在一个对象数组中过滤除条件数组外的内容。 理想状态应该显示id为:1、 2、 4的对象。可是结果却是显示了数组内的所有内容,过滤完全没起到效果。这是为什么呢?

阅读 2.5k
3 个回答

判断条件写错了,你那个for循环,根本就没有循环比较每个元素,只是比较了第一个元素'3',结果应该不是显示所有的内容,而是1,2,4,5

正确写法应该是

var temp = arr.filter(item => {
   for (let i = 0; i < tiaojian.length; i++) {
    if (tiaojian[i] == item.name) {
      return false;
    }
  }
  return true;
});

var temp = arr.filter(item => {
    return tiaojian.every(val => item.name !== val)
})

var temp = arr.filter(item => tiaojian.indexOf(item.name) === -1)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏