📅  最后修改于: 2023-12-03 14:49:24.964000             🧑  作者: Mango
在 JavaScript 中,我们有一个很常见的任务:从数组中删除空值。这个任务似乎很简单,但实际上需要注意一些细节。下面我们将介绍不同的方法来完成这个任务。
const array = ["foo", "", "bar", undefined, null, "baz"];
for (let i = 0; i < array.length; i++) {
if (array[i] === "" || array[i] === undefined || array[i] === null) {
array.splice(i, 1);
i--;
}
}
console.log(array); // ["foo", "bar", "baz"]
这种方法使用 for 循环遍历数组,在循环中使用条件语句判断元素是否为空,如果是,则使用 splice 方法删除这个元素。需要注意的是,在删除元素后,i 的值需要减 1,以便下一个循环可以正确处理元素。
const array = ["foo", "", "bar", undefined, null, "baz"];
const filteredArray = array.filter(item => item !== "" && item !== undefined && item !== null);
console.log(filteredArray); // ["foo", "bar", "baz"]
这种方法使用数组的 filter 方法,参数是一个回调函数,在回调函数中判断元素是否为空。这种方法看起来更简洁,但实际上创建了一个新数组来保存过滤后的元素,而原数组并没有改变。
const array = ["foo", "", "bar", undefined, null, "baz"];
const reducedArray = array.reduce((accumulator, currentValue) => {
if (currentValue !== "" && currentValue !== undefined && currentValue !== null) {
accumulator.push(currentValue);
}
return accumulator;
}, []);
console.log(reducedArray); // ["foo", "bar", "baz"]
这种方法使用数组的 reduce 方法,参数是一个回调函数和初始值。回调函数中判断元素是否为空,如果不为空,则加入累加器中。这种方法也创建了一个新数组来保存过滤后的元素,但与 filter 方法不同的是,它使用了 reduce 方法,可以进一步处理数组的元素。
无论使用哪种方法,删除空值的操作都很简单。但需要记住在循环中正确处理元素的下标,以及使用 filter 或 reduce 方法会创建一个新数组并不改变原数组。