美好的一天,
我正在尝试从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;
}
}
使用上面的代码片段在数组中的预期元素将是:
[1, 2, 3, 4, 5, undefined, 6]
-完美。但是:
我想摆脱无限循环,也要避免递归,while(true)
或类似的东西。但是,我被困在这里了,在使用arr.pop()
之后如何找到尾随的未定义条目并将其删除?我不能使用arr.compact()
-因为我依靠undefined
之后的5
来保持原样:我不想删除'false'值。
答案 0 :(得分:0)
这是您要寻找的吗?
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)
答案 1 :(得分:0)
在最后一个元素未定义的情况下进行循环:
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)
答案 2 :(得分:0)
在array.pop
时使用lastItem = undefined
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);
答案 3 :(得分:0)
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);
答案 4 :(得分:0)
您可以通过更改数组的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);
答案 5 :(得分:0)
嘿。。它的可爱很简单。 上面的示例为您解决了。
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()
说明
就这么简单。希望这会有所帮助