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/
答案 0 :(得分:25)
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"]
答案 1 :(得分:7)
for (var i = fruit.length - 1; i > -1; i--) {
if (fruit[i] == "pear")
fruit.splice(i, 1);
}
答案 2 :(得分:3)
当你迭代它时从数组中删除项目时,你通常会向后迭代,以便当你删除它们时当前索引不会跳过项目:
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 );
答案 3 :(得分:2)
如果原始数组中存在大量“错误”元素,我建议至少考虑不使用就地数组,而是将所有“正确”元素收集到一个新数组中:
var rightFruits = [];
for (var i = 0, len = fruit.length; i < len; ++i) {
if (fruit[i] !== 'pear') {
rightFruits.push(fruit[i]);
}
}
答案 4 :(得分:1)
var i;
for (i = 0; i < fruits.length; i += 1) {
if (fruits[i] == "pear") {
fruits.splice(i, 1);
i -= 1;
}
}
由于JavaScript的数组实际上是对象,因此for in
语句可用于迭代数组的所有属性。
遗憾的是,for in
并不能保证属性的顺序,而且大多数都是如此
数组应用程序期望元素按数字顺序生成。此外,仍有问题
意外的属性从原型链中挖掘出来。
幸运的是,传统的for语句避免了这些问题。 JavaScript的for语句类似于 在大多数类C语言中。它由三个子句控制:第一个初始化循环,第二个是while条件,第三个是增量:
var i;
for (i = 0; i < myArray.length; i += 1) {
document.writeln(myArray[i]);
}
答案 5 :(得分:1)
您还可以使用filter
:
let noPears = fruits.filter(fruit => fruit != 'pear')
答案 6 :(得分:0)
var i; while ((i = fruit.indexOf("pear")) > -1) fruit.splice(i,1);
请注意,IE8及以下版本不支持Array.indexOf。 -_-
答案 7 :(得分:0)
为什么不向后迭代列表?这样,当您从列表中删除元素并且长度发生变化时,它不会破坏循环逻辑:
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"]
答案 8 :(得分:0)
如果它不关心反向迭代,你可以使用while和array的pop函数的组合
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);
答案 9 :(得分:-1)
for(var f in fruit) {
if ( fruit[f] == "pear" ) {
fruit.splice(f-1, 1);
}
}
for(var f in fruit) {
document.write(fruit[f]+"<br>");
}
享受