从数组中删除最后一项和前面的未定义条目



美好的一天,

我正在尝试从 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()

解释

  1. 首先创建一个原型函数以删除提供的元素。
  2. 使用为数组创建的清理函数。使用 clean 函数从 [arr] 数组中删除 [未定义] 值。
  3. 使用 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)

最新更新