为什么'undefined'没有从Array中删除?过滤后?

时间:2017-08-30 10:48:28

标签: javascript arrays

["a", undefined, "c"].map((x)=>{return x})
// this is the console output --> ["a", undefined, "c"]
["a", undefined, "c"].map((x)=>{return typeof(x)})
// this is the console output --> ["string", "undefined", "string"]
["a", undefined, "c"].map((x)=>{if(typeof(x)=='string'){return x}})
// this is the console output --> ["a", undefined, "c"]

我想知道,为什么即使在if(typeof(x)=='string')检查后仍未删除未定义的内容。迷茫?

5 个答案:

答案 0 :(得分:6)

您可以将Array#filterBoolean一起用作truthy值的回调。



console.log(["a", undefined, "c"].filter(Boolean));




为了保留字符串,您可以返回类型检查。



console.log(["a", undefined, "c", 42, ""].filter(s => typeof s === 'string'));




ES5



console.log(["a", undefined, "c", 42, ""].filter(function (s) {
    return typeof s === 'string';
}));




答案 1 :(得分:4)

map没有过滤。 map地图。要进行过滤,请使用filter:回调的返回值用于确定是否保留该条目。如果你只想保留字符串:

const result = ["a", undefined, "c"].filter(x => typeof x === "string");



const result = ["a", undefined, "c"].filter(x => typeof x === "string");
console.log(result);




如果您明确要删除undefined

const result = ["a", undefined, "c"].filter(x => x !== undefined);



const result = ["a", undefined, "c"].filter(x => x !== undefined);
console.log(result);




答案 2 :(得分:-1)

使用.filter代替.map。 还阅读了map

的文章

var output = ["a", undefined, "c"].filter((x)=>{if(typeof(x)=='string'){return x}});
console.log(output);

答案 3 :(得分:-1)

map遍历给定数组并返回一个新数组,其中包含输入的每个项目的一个新项目。

所以你的构造if(typeof(x)=='string'){return x},因为它是map的一部分,实际上总是返回一些东西 - 默认情况下是从输入数组中获取的值。

你可以看到,如果你添加一个else个案例,那么"值不是一个字符串"。但是,您无法使用map减少生成的数组中的项目数。

要创建新数组,根据某些条件更改项目数,请使用filter

答案 4 :(得分:-1)

你可以做到

var arrayVal = [1, undefined, 2, 3, 4]; 
arrayVal = arrayVal.filter(function(n){ return n != undefined });

console.log(arrayVal);