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

ar7v8xwq  于 2022-10-30  发布在  Java
关注(0)|答案(2)|浏览(258)

我有一个数组,我想将空/未定义的值转换为null。我已经尝试了以下方法:

let arr = []
arr[1] = 2
arr[7] = 10
arr = arr.map(x => x || null)

console.log(arr)

但是代码段的输出并不理想:

[
  undefined,
  2,
  undefined,
  undefined,
  undefined,
  undefined,
  undefined,
  10
]

如何将这些未定义的值替换为空值?
注:普通JS和Lodash答案均可接受。

e3bfsja2

e3bfsja21#

您所得到的结果适用于其中包含undefined元素的数组,但不适用于其中包含空洞的稀疏数组,因为map不会访问稀疏数组中的空洞;相反,所得到的阵列只是在相同的位置具有孔。
如果还想Map孔,可以使用Array.from及其Map回调函数:

let arr = [];
arr[1] = 2;
arr[7] = 10;
arr = Array.from(arr, x => x || null);

console.log(arr);

map不同,Array.from将遍历数组的所有索引(包括洞),将undefined作为数组中洞的x传递给Map回调。
另一个选择是简单的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会将所有falsy值替换为null(包括0"",这经常会使人出错)。要只替换undefined,请使用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 ?? ynullish coalescing)类似于x || y,但仅当x的计算结果为undefinednull时,才使用y

hgc7kmma

hgc7kmma2#

尝试一些非常基本的东西:

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
]

相关问题