前端过滤问题求解?

菜鸟001
  • 236

之前是过滤掉data中和columnsDataList3中calcCode相同的,现在是要过滤calcCode、startPeriod、endPeriod这三个同时满足的时候才过滤掉,只有一个或者两个满足的时候不过滤

this.attachmentList1 = dt.data.content.filter(item => {
    return item.calcCode != this.columnsDataList3[0].calcCode
});
回复
阅读 1.2k
6 个回答
this.attachmentList1 = dt.data.content.filter(item => {
    const dataList3 = this.columnsDataList3[0];
    const isFilter = item.calcCode === dataList3.calcCode && item.startPeriod === dataList3.startPeriod && item.endPeriod === dataList3.endPeriod;
    if (!isFilter) return item;
  });

写判断,用且的方式连一起
例 return v==v1&&v==v2&&v=v3

this.attachmentList1 = dt.data.content.filter(item => {
  return checkNotSame(item, this.columnsDataList3[0])
})

function checkNotSame(currentItem, data) {
  const sameKeyArr = ['calcCode', 'startPeriod', 'endPeriod']

  return !!sameKeyArr.find(key => currentItem[key] !== data[key])
}
this.attachmentList1 = dt.data.content.filter(item => {
    const { calcCode, startPeriod, endPeriod } = this.columnsDataList3[0]
    return item.calcCode !== calcCode || item.startPeriod !== startPeriod || item.endPeriod !== endPeriod
})

这样?

filter 是满足条件的会留下来,所以:

this.attachmentList1 = dt.data.content.filter(item => 
    item.calcCode === this.columnsDataList3[0].calcCode
    && item.startPeriod === this.columnsDataList3[0].startPeriod
    && item.endPeriod === this.columnsDataList3[0].endPeriod
);

如果是要把 3 个属性都与 this.columnsDataList3[0] 中对应的属性相同的 item 过滤掉,可以这样写逻辑

方法一:! + &&,先判全相同,再取反

this.attachmentList1 = dt.data.content.filter(item => {
  return !(item.calcCode == this.columnsDataList3[0].calcCode
    && item.startPeriod == this.columnsDataList3[0].startPeriod
    && item.endPeriod == this.columnsDataList3[0].endPeriod)
});

方法二:||,判一不同

this.attachmentList1 = dt.data.content.filter(item => {
  return item.calcCode != this.columnsDataList3[0].calcCode
    || item.startPeriod != this.columnsDataList3[0].startPeriod
    || item.endPeriod != this.columnsDataList3[0].endPeriod
});

方法三:! + every,逻辑同方法一

this.attachmentList1 = dt.data.content.filter(item => {
  return !['calcCode', 'startPeriod', 'endPeriod']
    .every(prop => item[prop] == this.columnsDataList3[0][prop])
});

方法四:some,逻辑同方法二

this.attachmentList1 = dt.data.content.filter(item => {
  return ['calcCode', 'startPeriod', 'endPeriod']
    .some(prop => item[prop] != this.columnsDataList3[0][prop])
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏