我有一个数组,我想将空/未定义的值转换为 null。我已经尝试过以下方法:
let arr = []
arr[1] = 2
arr[7] = 10
arr = arr.map(x => x || null)
console.log(arr)Run Code Online (Sandbox Code Playgroud)
但代码片段的输出并不符合预期:
[
undefined,
2,
undefined,
undefined,
undefined,
undefined,
undefined,
10
]
Run Code Online (Sandbox Code Playgroud)
如何用空值替换这些未定义的值?
注意: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);Run Code Online (Sandbox Code Playgroud)
与 不同的是map,Array.from将遍历数组的所有索引,包括孔,将数组中的孔传递给映射回调undefined。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);Run Code Online (Sandbox Code Playgroud)
请注意,会将所有虚假值x || null替换为(包括和,这通常会让人绊倒)。要仅替换,请改用: null0""undefinedx ?? null
let arr = [];
arr[1] = 2;
arr[7] = 10;
arr = Array.from(arr, x => x ?? null);
console.log(arr);Run Code Online (Sandbox Code Playgroud)
或者
let arr = [];
arr[1] = 2;
arr[7] = 10;
const newArr = [];
for (const value of arr) {
newArr.push(value ?? null);
}
arr = newArr;
console.log(arr);Run Code Online (Sandbox Code Playgroud)
x ?? y(无效合并)类似于但仅在计算结果为or时x || y使用。yxundefinednull
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |