将空值转换为0

时间:2018-12-05 18:48:36

标签: javascript

请考虑/请在chrome控制台中自行尝试。

data = [1,,2,,3]

现在我想将空值替换为0

data = [1,0,2,0,3]

我做到了:

data = data.map(e => {

    if (e===undefined)
    {
        return 0;
    }
    else
    {
        return e;
    }
});

但是它仍将空值返回为空。正确的方法是什么?

3 个答案:

答案 0 :(得分:8)

问题在于map不会为数组缺少的元素调用函数。来自MDN

  

callback仅对具有指定值(包括undefined)的数组索引调用。不会因为缺少数组元素(即从未设置,已删除或从未分配值的索引)而调用它。

forEach也是如此。

您需要遍历数组索引,而不是使用任何一种映射函数。

for (let i = 0; i < data.length; i++) {
    if (!(i in data)) {
        data[i] = 0;
    }
}

请注意,使用i in data使其仅跳过不存在的条目。如果您有一个明确的undefined,它将被保留,例如

[1, , undefined, 3, 4]

将成为

[1, 0, undefined, 3, 4]

如果您要替换显式undefined,则可以改用i === undefined

答案 1 :(得分:4)

Array.from()对此非常有用。它将使用length遍历数组,因此不会像map()那样跳过未定义的值。您可以将值传递给它的第二个参数,该参数是一个函数,然后返回值or 0:

let data = [1,,2,,3]
let new_array = Array.from(data, i=> i || 0)

console.log(new_array)

答案 2 :(得分:0)

尝试遍历数组的长度并填补空白:

for(var i = 0; i < data.length; i++)
{
    if(typeof(data[i]) === 'undefined')
    {
        data[i] = 0;
    }
}