微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

不明白这个“for”循环的结果重新编辑 如果 contenuespacemenu 是一个数组,请尝试:Else If contenuespacemenu 一堆文本尝试使用:

如何解决不明白这个“for”循环的结果重新编辑 如果 contenuespacemenu 是一个数组,请尝试:Else If contenuespacemenu 一堆文本尝试使用:

我想做一个小程序,从数组中删除一些不需要的字符,如“/n”、“/t”,问题是它部分工作。我看到程序删除了一些我想要的字符,但不是所有索引(例如:第 3 个和第 5 个):

程序:

var contenuespacemenu = $('.Espace-Menu').children('div').html(); //the array which contains characters i want to delete.  
var bannedcaractere = ["\n","\t"];
var caractereinside = [];

  for (var i = 0; i < 50; i++) {
    for (var j = 0; j < (bannedcaractere.length); j++) {
      let test = contenuespacemenu[i] == bannedcaractere[j];
      if (test) {
        i = i + 1;
      } else {
        caractereinside[i] = contenuespacemenu[i];
      }
    }
  }


console.log(caractereinside);

显示了这个结果:

enter image description here

一些不需要的字符被删除,但不是全部... 索引 3 和 5。

这是将 html 标签的字符串内容逐个字符放入数组“caractereinside”的主要代码

var contenuespacemenu = $('.Espace-Menu').children('div').html();
//var bannedcaractere = ["\n","\t"];
var caractereinside = [];



for (var i = 0; i < 50; i++) {

  caractereinside[i] = contenuespacemenu [i];
  }

console.log(caractereinside);

结果:

enter image description here

如果我将“var contenuespacemenu”转换成这样的常规数组,它会起作用:

var contenuespacemenu = ["1","2","3","4","5","6","7","8"];
//var bannedcaractere = ["\n","\t"];
var caractereinside = [];



for (var i = 0; i < 50; i++) {

  caractereinside[i] = contenuespacemenu [i];
  }

console.log(caractereinside);

我明白了:

enter image description here

我也试图用一个休息来代替 i = i+1 就像我的身高一样,就像这样:

var contenuespacemenu = $('.Espace-Menu').children('div').html();
var bannedcaractere = ["\n","\t"];
var caractereinside = [];



for (var i = 0; i < 50; i++) {
  for (var j = 0; j < (bannedcaractere.length); j++) {
    let test = contenuespacemenu[i] == bannedcaractere[j];
    if (test) {
      break;
    }
    else {
      caractereinside[i] = contenuespacemenu[i];

  }

  }
}


console.log(caractereinside);

但它给了我这个:

enter image description here

最后,我再次尝试使用 i = i+1 并为 var contenuespacemenu 定义了数组,也更改了 var bannedcharacter,并且它的工作方式应该是:

var contenuespacemenu = ["1","8"];//the array which contains characters i want to delete.
var bannedcaractere = ["1","4"];
var caractereinside = [];

  for (var i = 0; i < 50; i++) {
    for (var j = 0; j < (bannedcaractere.length); j++) {
      let test = contenuespacemenu[i] == bannedcaractere[j];
      if (test) {
        i = i+1;
      } else {
        caractereinside[i] = contenuespacemenu[i];
      }
    }
  }


console.log(caractereinside);

结果:

enter image description here

解决方法

不确定您为什么使用 2 个循环,但我已通过更改以下内容将您的上一个示例更改为工作状态:

  • 将硬编码的 50 更改为 contenuespacemenu.length
  • 在第二个循环/test 之外,我将使用 !bannedcaractere.includes(contenuespacemenu[i]) 检查当前字符是否有效
  • 删除了 i = i+1;,因为我们应该让 for 处理迭代器
  • 使用 push() 而不是 caractereinside[i] 来防止对删除的索引进行 undefined

var contenuespacemenu = ["1","2","3","4","5","6","7","8","1","3"];
var bannedcaractere = ["1","4"];
var caractereinside = [];

// Remove all from bannedCars
for (var i = 0; i < contenuespacemenu.length; i++) {
    if (!bannedcaractere.includes(contenuespacemenu[i])) {
      caractereinside.push(contenuespacemenu[i]);
    }
}

// Result
console.log(caractereinside);


也就是说,可以通过使用 filterincludes 来简化上述内容:

var contenuespacemenu = ["1","4"];

// Filter
let caractereinside = contenuespacemenu.filter(n => !bannedcaractere.includes(n));

// Result
console.log(caractereinside);

,

如果 contenuespacemenu 是一个数组,请尝试:

const contenuespacemenu = $('.Espace-Menu').children('div').html(); //the array which contains characters i want to delete.  
const bannedcaractere = ["\n","\t"];
const caractereinside = contenuespacemenu.slice(0,contenuespacemenu.length); // I copy the table so as not to risk modifying it later

for (let i = 0; i < 50; i++) {
  let test = bannedcaractere.includes(caractereinside[i]);
  if (test) {
    caractereinside.splice(i,1);
  } 
}

// 50 must be the length of the characterinside array if you want to iterate over the whole array

console.log(caractereinside);

Else If contenuespacemenu 一堆文本尝试使用:

const contenuespacemenu = $('.Espace-Menu').children('div').html(); //the array which contains characters i want to delete.
const bannedcaractere = ["\n","\t"];
const caractereinside = [];

for (const i = 0; i < 50; i++) {
  caractereinside[i] = contenuespacemenu[i];
  let test = bannedcaractere.includes(caractereinside[i]);
  if (test) {
    caractereinside.splice(i,1);
  }
}

// 50 must be the length of the characterinside array if you want to iterate over the whole contenuespacemenu

console.log(caractereinside);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。