splice函数不从数组中删除2个cosecutive字符串

时间:2017-03-22 21:38:39

标签: javascript arrays

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"]。它似乎没有删除一个接一个的字符串。此外,我试图在一个新的数组变量中获取更新的数组,但我不知道如何在这里做到这一点。非常感谢一些帮助。

2 个答案:

答案 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