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

dan*_*y74 2 javascript

我有一个数组,我想将空/未定义的值转换为 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 答案都是可以接受的。

T.J*_*der 5

您所拥有的将适用于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)

与 不同的是mapArray.from将遍历数组的所有索引,包括孔,将数组中的孔传递给映射回调undefinedx

另一种选择是简单的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