我一直在chrome控制台上尝试使用Number.isInteger()方法。
并且在执行for循环并使用console.log(arr);
检查结果后,我得到一个只有一个值为1的数组,例如[1];
var arr = [1,2,3,'some','string'];
for (var i = 0; i < arr.length; i++) {
if (Number.isInteger(arr[i])) {
arr.splice(arr.indexOf(arr[i], 1));
}
}
任何人都有一个想法,如果我做错了什么的。谢谢你的帮助。
答案 0 :(得分:1)
您遇到了一个主要问题,在循环播放时,您不断从数组中删除项目。每次删除项目时,您都必须返回一步(i--
)。
var arr = [1,2,3,'some','string'];
for (var i = 0; i < arr.length; i++) {
if (!isNaN(arr[i])) { // isNaN return true if it's not a valid number, so we have to inverse the test
arr.splice(i, 1); // if it's a valid number remove the element at the index i (no need to search for the index using indexOf, we already have it its i)
i--; // if we remove an element, we have to go back one step (or we will leave one item behind every time we remove another)
}
}
console.log(arr);
答案 1 :(得分:0)
您可以改用typeof:
var arr = [1,2,3,'some','string'];
for (var i = 0; i < arr.length; i++) {
if (typeof arr[i] == 'number') {
arr.splice(arr.indexOf(arr[i], 1));
}
}
答案 2 :(得分:0)
`.splice()'方法对数组本身进行更改。
因此,对于数组的每次迭代,您都会从根本上改变它。
如果您希望数组只包含整数:
var arr = [1,2,3,'some','string'];
var newArray = [];
arr.forEach(function(element) {
if (Number.isInteger(element)){
newArray.push(element);
}
});
console.log(newArray);