请考虑/请在chrome控制台中自行尝试。
data = [1,,2,,3]
现在我想将空值替换为0
data = [1,0,2,0,3]
我做到了:
data = data.map(e => {
if (e===undefined)
{
return 0;
}
else
{
return e;
}
});
但是它仍将空值返回为空。正确的方法是什么?
答案 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;
}
}