繁体   English   中英

用 JavaScript 数组中的空值替换空/未定义值

[英]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计算结果为undefinednull时使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM