美好的一天,
我正在尝试从 JavaScript 中的数组中删除最后一项,以及它之前的所有undefined
值,直到数组中的项目不再undefined
。
var arr = [1, 2, 3, 4, 5, undefined, 6, undefined, undefined, 7]
for (;;) {
var lastItem = arr.pop();
if (lastItem !== undefined && arr.length >= 0) {
doStuff(lastItem);
break;
}
}
使用上述 snip 的数组中的预期元素将是:[1, 2, 3, 4, 5, undefined, 6]
- 这是完美的。然而:
我想摆脱无限循环,也避免递归,while(true)
或类似的东西。但是,我被困在这里,如何在使用arr.pop()
后找到尾随的未定义条目并删除它们?我不能使用arr.compact()
- 因为我依靠5
后的undefined
条目来保持机智:我不想删除"错误"值。
这是你要找的吗?
var arr = [1, 2, 3, 4, 5, undefined, 6, undefined, undefined, 7]
const lastItem = arr.pop();
for (let i = arr.length-1; i>=0; --i) {
if(arr[i]===undefined) arr.pop();
else break;
}
console.log(arr)
在lastItem = undefined
时使用array.pop
var arr = [1, 2, 3, 4, 5, undefined, 6, undefined, undefined, 7];
arr.pop();
while(arr[arr.length-1] == undefined && arr.length>0) arr.pop();
console.log(arr);
var arr = [1, 2, 3, 4, 5, undefined, 6, undefined, undefined, 7];
var result = arr.slice(0, (arr.indexOf(undefined) == -1 ? arr.length : arr.indexOf(undefined) + 2));
console.log(result);
嘿..它的外观很简单。 上面的例子为您解决了。
Array.prototype.clean = function(deleteValue) {
for (var i = 0; i < this.length; i++) {
if (this[i] == deleteValue) {
this.splice(i, 1);
i--;
}
}
return this;
};
var arr = [1, 2, 3, 4, 5, undefined, 6, undefined, undefined, 7]
arr.clean(undefined)
arr.pop()
解释
- 首先创建一个原型函数以删除提供的元素。
- 使用为数组创建的清理函数。使用 clean 函数从 [arr] 数组中删除 [未定义] 值。
- 使用 pop(( 函数弹出最后一个元素。
就这么简单.希望这有帮助
您可以通过更改数组的length
来删除最后一个元素,并检查最后一个元素是否undefined
。然后继续,直到最后没有更多的undefined
值。
var array = [1, 2, 3, 4, 5, undefined, 6, undefined, undefined, 7];
do ; while (--array.length && array[array.length - 1] === undefined)
console.log(array);
只是在最后一个元素未定义时循环:
var arr = [1, 2, 3, 4, 5, undefined, 6, undefined, undefined, 7]
let lastItem = arr.pop();
while(arr[arr.length - 1] == undefined && arr.length){
arr.pop();
lastItem = arr[arr.length - 1];
}
console.log(arr)