首页 > 解决方案 > 数组的拼接会减少array.length的值吗?

问题描述

function filter_list(l) {
  for (var i = 0; i < l.length; i++) {
    if (typeof(l[i]) === 'string') {
      l.splice(i, 1);
    }
  }
  return l;
}
console.log(filter_list([1, 2, 'a', 'b']));

当元素2(索引从0开始)拼接时,为什么for循环中数组的长度没有变为3?最后一个元素不应被处理,但它已被处理。

标签: javascriptarraysarray-splice

解决方案


数组的拼接会减少array.length的值吗?

是的,因为方法就地splice修改了数组

解决方案可能是使用while 循环

function filter_list(l) {
  i = l.length;
  while (i--) {
      if (typeof(l[i]) === 'string') {
          l.splice(i, 1);
      }
  }
  return l;
}

console.log(filter_list([1, 2, 'a', 'b']));


推荐阅读