【问题标题】:JavaScript filter returning true but not filteringJavaScript 过滤器返回 true 但不过滤
【发布时间】:2020-01-05 12:18:15
【问题描述】:

在过去的一个小时里,我一直在努力让以下代码正常工作:

  for (let i = 0; i < weekarr.length; i++) {
    if (i - 1 > -1) {
      weekarr[i].forEach(arr => {
        weekarr[i - 1].forEach(p => {
          if (
            arr.html === p.html &&
            !(arr.category === "prehab" && arr.canDo === true)
          ) {
            weekarr[i].filter(p => {
              console.log(p === arr);
              return p === arr;
            });
            // if (i + 1 < 5) weekarr[i + 1].push(arr);
          }
        });
      });
    }
  }

weekarr 看起来像这样:

如果前一个数组包含相同的数组项(在这种情况下通过 html 属性识别),我基本上是在尝试删除一个数组项。一切都很完美,除了它根本没有过滤。我在控制台记录了它应该返回的是真值还是假值,而且确实如此。似乎无法弄清楚这一点。

【问题讨论】:

  • @Pavitra filter 正在第二个 forEach 内使用 :)
  • @SerShubham 在发表我的评论后注意到 :)
  • 你没有对过滤后的数组做任何事情。它过滤然后你忽略它并继续前进。
  • 天哪,一天编码太多了。不敢相信我错过了

标签: javascript arrays reactjs filter


【解决方案1】:

过滤器函数返回一个新数组。它不会修改原始数组。 尝试将过滤器的结果存储在一个新变量中并返回它?

const filteredWeakArr = weekarr[i].filter(p => {
   console.log(p === arr);
   return p === arr;
});

现在,filteredWeakArr 应该会得到您想要的结果

【讨论】:

    【解决方案2】:

    那是因为您没有保存过滤器数组。应保存结果以使其生效,例如

    weekarr[i] = weekarr[i].filter(p => {
              console.log(p === arr);
              return p === arr;
    });
    

    也可以查看filter 了解更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      • 2017-02-27
      • 1970-01-01
      • 2022-09-12
      • 1970-01-01
      • 2017-12-15
      • 1970-01-01
      相关资源
      最近更新 更多