我正在尝试解决我在Javascript中遇到的问题,我对JS完全陌生。这是我的代码:
function filterOutStringfromArr(array) {
var arr = []
for (var i = 0; i < array.length; i++) {
if (typeof array[i] === 'number') {
arr[i] = array[i]
}
}
console.log(arr)
}
filterOutStringfromArr([1,2,'A','B',123])
运行此命令时,将得到以下结果:[ 1, 2, <2 empty items>, 123 ]
。
我知道发生这种情况是因为数组的长度为5。但是我只想将过滤后的值附加到空数组arr[]
上。我该怎么办?
答案 0 :(得分:2)
function filterOutStringfromArr(array) {
var arr = []
for (var i = 0; i < array.length; i++) {
if (typeof array[i] === 'number') {
arr.push(array[i])
}
}
console.log(arr)
}
filterOutStringfromArr([1,2,'A','B',123])
MDN链接很好
您应该使用push
,该值将附加到数组的末尾。通过将找到的元素插入到点i
中,您将从索引3移到索引5,从而将空元素移入索引。
答案 1 :(得分:1)
我建议使用Array.prototype.push()
方法。
function filterOutStringsfromArray(array) {
var arr = [];
for (let i = 0; i < array.length; i++) {
if (typeof array[i] === 'string') {
arr.push(array[i]);
}
}
return arr;
}
filterOutStringfromArr([5, 2, 'h', 2, 's', 2]) // Expected Output: ['h', 's']
答案 2 :(得分:1)
过滤方法将解决您的问题。
function filterOutStringfromArr(array) {
const newArray = array.filter(item => {
if (typeof item === 'number') {
return item;
}
})
console.log(newArray);
}
filterOutStringfromArr([1,2,'A','B',123])
答案 3 :(得分:1)
我个人只会使用普通的数组过滤器功能并测试条件。让本机array.filter函数为您完成工作。下面将过滤该数组并返回一个新数组(不修改现有数组)。
function filterToArrayOfNumbers(arrayElement) {
return typeof arrayElement === 'number';
}
console.log([1,2,'A','B',123].filter(filterToArrayOfNumbers));
答案 4 :(得分:0)
arr[i] = array[i] // <------------ your issue
i
仍在递增,因此当您查看最后一个数字123
(索引4)时,它将把新数组设置为索引4(将2和3留为空白)< / p>
您可以执行arr.push(array[i])
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push