如何从 javascript 中的 foreach 循环中删除特定的数组元素
How to delete specific array elements from within a foreach loop in javascript
var fruit = ["apple","pear","pear","pear","banana"];
如何从此数组中删除所有"梨"果实?
我尝试了以下方法,但仍然剩下一个梨:
for(var f in fruit) {
if ( fruit[f] == "pear" ) {
fruit.splice(f, 1);
}
}
for(var f in fruit) {
document.write(fruit[f]+"<br>");
}
输出:
apple
pear
banana
我做错了什么?现场演示:http://jsfiddle.net/SbxHc/
var fruit = ["apple", "pear", "pear", "pear", "banana"],
i;
for (i = 0; i < fruit.length; ++i) {
if (fruit[i] === "pear") {
fruit.splice(i--, 1);
}
}
console.log(fruit);
//["apple", "banana"]
for (var i = fruit.length - 1; i > -1; i--) {
if (fruit[i] == "pear")
fruit.splice(i, 1);
}
当您在
迭代数组时从数组中删除项目时,通常会向后迭代,以便当前索引在删除项目时不会跳过它们:
var fruit = ["apple","pear","pear","pear","banana"];
var i;
for (i = fruit .length - 1; i >= 0; i--) {
if (fruit [i] === "pear") {
fruit .splice(i, 1);
}
}
console.log(fruit );
如果原始数组中有很多"错误"的元素,我建议至少考虑不使用就地数组,而是将所有"正确"的元素收集到一个新数组中:
var rightFruits = [];
for (var i = 0, len = fruit.length; i < len; ++i) {
if (fruit[i] !== 'pear') {
rightFruits.push(fruit[i]);
}
}
var i;
for (i = 0; i < fruits.length; i += 1) {
if (fruits[i] == "pear") {
fruits.splice(i, 1);
i -= 1;
}
}
6.4. 枚举
由于 JavaScript 的数组实际上是对象,因此 for in
语句可用于迭代数组的所有属性。不幸的是,for in
不保证属性的顺序,而且大多数数组应用程序期望按数字顺序生成元素。此外,仍然存在问题从原型链中疏通意外属性。
幸运的是,常规的 for 语句避免了这些问题。JavaScript 的 for 语句类似于在大多数类 C 语言中。它由三个子句控制:第一个初始化循环,第二个是 while 条件,第三个执行增量:
var i;
for (i = 0; i < myArray.length; i += 1) {
document.writeln(myArray[i]);
}
您也可以
使用filter
:
let noPears = fruits.filter(fruit => fruit != 'pear')
var i; while ((i = fruit.indexOf("pear")) > -1) fruit.splice(i,1);
请注意,IE8 及更低版本不支持 Array.indexOf。
为什么不向后迭代列表?这样,当您从列表中删除元素并且长度更改时,它不会中断循环逻辑:
var fruit = ["apple","pear","pear","pear","banana"];
for (var i = fruit.length - 1; i >= 0; i--) {
if (fruit[i] === "pear") {
fruit.splice(i, 1);
}
}
console.log(fruit); // ["apple", "banana"]
如果它不关心反向迭代,你可以使用 while 和数组的 pop-function 的组合
var daltons = [
{ id: 1, name: "Joe" },
{ id: 2, name: "William" },
{ id: 3, name: "Jack" },
{ id: 4, name: "Averell" }
];
var dalton;
while (dalton=daltons.pop()) {
console.log(dalton.name);
}
console.log(daltons);
for(var f in fruit) {
if ( fruit[f] == "pear" ) {
fruit.splice(f-1, 1);
}
}
for(var f in fruit) {
document.write(fruit[f]+"<br>");
}
享受
相关文章:
- Mongoose-在更新中删除数组元素
- 删除仅空格数组元素
- 如何根据数组内容添加/删除数组中的元素
- 删除数组元素并将它们添加回原来的位置
- 删除基于另一个数组的数组元素
- 如果一个键匹配,如何删除数组元素
- 无法使用拼接删除数组中的元素
- 在 jquery 中,如何通过索引[“键”] 或值删除数组元素
- 使用 Lodash 删除数组中的元素
- 按索引删除数组元素
- 删除数组元素并将它们填充在 javascript 中的另一个数组中
- 按索引删除数组元素
- 当子数组具有特定值时删除数组元素
- Redux reducer删除数组元素失败
- 使用javascript删除数组元素
- 在条件下删除数组元素
- 按值删除数组元素的最佳方法
- 删除数组元素时,边栏关闭
- Javascript按值从数组中删除数组元素
- 如何使用特定值删除数组元素