【问题标题】:remove matched items found in for loop删除在 for 循环中找到的匹配项
【发布时间】:2021-01-12 04:36:42
【问题描述】:

我正在通过对象数据响应进行搜索并检测它是否包含“wdt”。这很好用;但是,我正在努力销毁或删除找到的项目,使其无法使用我的data 进行处理。

不相信在 JavaScript 中没有像 delete 这样有效的单个关键字来执行此操作吗?

我目前正在尝试splice,但它似乎并不有效。仍然在我的console.log(data); 中找到项目

let data = await getData(); 

filterChkpt();

function filterChkpt(){
    for (let i = 0; i < data.length; i++) {
      if (data[i].url.indexOf('wdt') > -1) {
          console.log(data[i]);

          data[i].splice(index, 1); // here would like to remove matches

      } else {
         // console.log('else: ', data[i].url);
      }
    }
  }

  console.log(data);

  if (!this.data) {
    this.data = {};
  }

  this.data.storage = new Memory({ data });

  return this;

【问题讨论】:

  • 尝试从data[i].splice(index, 1)中删除[i]
  • 除非出于某种原因您需要改变原始对象,否则这就是 array.filter 的用途。 (它吓到我修改对象同时迭代它。)
  • 你能用一些数据和工作示例重现问题吗?
  • @RainbowRandolph 在下面添加了一个带有演示 sn-p 的答案。如果您需要修改有问题的对象,您可以在过滤器之后链接 map 调用。
  • 创建一个新对象并添加您不会删除的值。我认为是最好的选择,因为您在 for 中使用相同的变量修改长度。

标签: javascript arrays for-loop indexof splice


【解决方案1】:

这不是解决方案,而是解释为什么代码不能按预期工作

a = [a, b, c, d, e, f]

i=0 => a
i=1 => b
i=2 => c  ( now you decide to splice the array >> a = [a, b, d, e, f]
i=3 => e!  ( you missed the "d" cos it was shifted to the left

每次拼接数组时都应该i--

【讨论】:

    【解决方案2】:

    除非出于某种原因您需要改变原始对象,否则这就是 array.filter 的用途。 (而且它让我在迭代对象时修改它。)

    const data = Array.from({length: 10}, () => ({ url: Math.random() > 0.5 ? 'foo' : 'bar' }));
    
    console.log(data);
    console.log(data.filter(x => x.url === 'foo'));

    【讨论】:

    • 谢谢.. 10 的长度是多少?另外,我正在搜索包含一段文本的值,即 wdt 不是硬编码的整个单词。
    • 第一行只是生成示例数据。与问题无关。您可以修改过滤器功能以进行任何您想要的测试,例如data.filter(x =&gt; x.url.indexOf('wdt') &gt; -1)。我只是想举一个最简单的例子。
    • 顺便说一句,您可以使用url.includes('wdt') 而不是 indexOf 来简化您的操作。
    • 我明白了...但我尝试删除找到的项目是因为我不想包含'wdt'或在您的示例中'foo' - 我想要那些不包括' wdt'。
    • 我怎么能得到相反的结果; '!!x.url.indexOf('wdt') > -1' 之类的东西?
    猜你喜欢
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2023-01-25
    相关资源
    最近更新 更多