【问题标题】:Why is this filter function not working as expected?为什么这个过滤器功能没有按预期工作?
【发布时间】:2023-01-11 03:30:42
【问题描述】:

这段代码:

let rId = requested.map((r) => r._id.toString());
console.log(rId);

let cId = confirmed.map((c) => c._id.toString());
console.log(cId);

rId.filter((r) => !cId.includes(r));
console.log(rId);

打印这个:

[
  '63bcc18d083dd2c66679e160',
  '63bcc331083dd2c66679e278',
  '63bdaef8f115ae565ac564c5'
]

[ '63bdaef8f115ae565ac564c5' ]

[
  '63bcc18d083dd2c66679e160',
  '63bcc331083dd2c66679e278',
  '63bdaef8f115ae565ac564c5'
]

为什么当函数返回 false 语句时,数组中的最后一项没有被过滤?

我期待打印的是:

[
  '63bcc18d083dd2c66679e160',
  '63bcc331083dd2c66679e278',
  '63bdaef8f115ae565ac564c5'
]

[ '63bdaef8f115ae565ac564c5' ]

[
  '63bcc18d083dd2c66679e160',
  '63bcc331083dd2c66679e278', // <-- item removed
]

【问题讨论】:

标签: javascript


【解决方案1】:

过滤器不会改变调用它的数组。

您需要将过滤器的结果设置为一个值;

rId = rId.filter((r) => !cId.includes(r));

【讨论】:

  • 谢谢,就是这个。
【解决方案2】:

filter 不改变原来的数组。您应该将结果分配给一个变量。

rId = rId.filter((r) => !cId.includes(r));
console.log(rId);

【讨论】:

  • 忽略最终函数,第 5 行的过滤器没有按预期工作
  • @DMonde 我已经更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 2015-10-12
  • 2019-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多