从数组中过滤出字符串

时间:2020-05-07 17:58:50

标签: javascript

我正在尝试解决我在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[]上。我该怎么办?

5 个答案:

答案 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