[英]Replacing empty/undefined values with nulls in JavaScript array
我有一个数组,我想将空/未定义的值转换为 null。 我尝试了以下方法:
let arr = [] arr[1] = 2 arr[7] = 10 arr = arr.map(x => x || null) console.log(arr)
但片段的输出并不如预期:
[未定义,2,未定义,未定义,未定义,未定义,未定义,10]
如何用空值替换这些未定义的值? TIA
注意:vanilla JS 和 lodash 答案都是可以接受的。
您所拥有的将适用于其中包含undefined
元素的数组,但不适用于其中有孔的稀疏数组,因为map
不会访问稀疏数组中的孔; 相反,生成的数组只是在相同的地方有洞。
如果您也想映射孔,您可以使用Array.from
及其映射回调:
let arr = []; arr[1] = 2; arr[7] = 10; arr = Array.from(arr, x => x || null); console.log(arr);
与map
不同, Array.from
将遍历数组的所有索引,包括孔,将数组中孔的undefined
as x
传递给映射回调。
另一种选择是简单for-of
循环,因为迭代会访问稀疏数组中的孔(这就是Array.from
在上面起作用的原因):
let arr = []; arr[1] = 2; arr[7] = 10; const newArr = []; for (const value of arr) { newArr.push(value || null); } arr = newArr; console.log(arr);
注意x || null
x || null
将用null
替换所有虚假值(包括0
和""
,这经常让人绊倒)。 要替换undefined
,请使用x ?? null
改为x ?? null
:
let arr = []; arr[1] = 2; arr[7] = 10; arr = Array.from(arr, x => x ?? null); console.log(arr);
或者
let arr = []; arr[1] = 2; arr[7] = 10; const newArr = []; for (const value of arr) { newArr.push(value ?? null); } arr = newArr; console.log(arr);
x ?? y
x ?? y
( nullish coalescing ) 就像x || y
x || y
但仅在x
计算结果为undefined
或null
时使用y
。
尝试一些非常基本的东西:
let arr = [];
arr[1] = 2; arr[7] = 10;
for(let i=0; i< arr.length; i++) {
if(!arr[i]) arr[i]=null;
}
console.log(arr);
输出:
[ null, 2, null, null, null, null, null, 10 ]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.