function filter_list(l) {
l.map((item,i,main) => {
if(typeof item==="string")
{return main.splice(i,1);}
else
return item;
});
console.log(l);
}
filter_list([1,'a','b','c',0,15,'k','e']);
这里我期待[1, 0, 15]
的输出。但相反,它给了我[1, "b", 0, 15, "e"]
。它似乎没有删除一个接一个的字符串。此外,我试图在一个新的数组变量中获取更新的数组,但我不知道如何在这里做到这一点。非常感谢一些帮助。
答案 0 :(得分:2)
使用filter
功能会更容易,并且true
返回string
以外的所有内容。
var a = [1, 'a', 'b', 'c', 0, 15, 'k', 'e'];
var b = a.filter(function (item) {
return ! (typeof item === 'string');
});
答案 1 :(得分:2)
问题是当你从原始数组中拼接元素时,你会在map()
的迭代中遇到问题,所以例如当你删除索引为1的a
时,索引为2的下一个元素是{ {1}}因为原始数组现在为c
所以您跳过[ 1, "b", "c", 0, 15, "k", "e" ]
。如果您不删除元素,则可以看到地图与代码中的数字不匹配。
b