删除字符串,使用JavaScript将数字保留在数组中

时间:2019-03-28 17:00:51

标签: javascript arrays

Other articles讨论基于搜索项从数组中删除字符串的问题。

但是我试图确定数组中哪些元素是字符串,哪些元素是数字,然后删除所有字符串以返回一个新数组。

function filter_list(l) {

  // Initiate new array

  let newArray = []; 

  // Loop through items in the array

  for (let i = 0; i < l.length; i ++) {

  // If the element is not in a string, add it to newArray

     if (i !== "^[a-zA-Z0-9_.-]*$") {
       newArray = newArray + i;
     }
  }
  return newArray;
}

这将返回0123

  1. 为什么不返回数组?
  2. 为什么if (i !== "^[a-zA-Z0-9_.-]*$")不起作用?我还能如何检查元素在数组中何时是字符串(用引号引起)?

https://www.codewars.com/kata/list-filtering/train/javascript

谢谢

3 个答案:

答案 0 :(得分:1)

正则表达式不是解析此类表的好方法。尝试isNaN

console.log(
    [1,2,3,4,5, 'a', 'b', 1, 3].filter(item => !isNaN(item) ? item : '')
)

如果您希望减少黑客行为,请尝试

function filter_list(l) { 
// l is very bad name, because look similar to i

  let newArray = []; 

  for (let i = 0; i < l.length; i ++) {
      !isNaN(l[i]) ? newArray.push(l[i]) : ''
  }
  return newArray;
}

甚至

  for (let i = 0; i < l.length; i ++) {
      !isNaN(l[i]) ? newArray[i] = l[i] : ''
  }

但是,可以使用正则表达式来完成此任务,但是我不推荐这种解决方案。


[1,2,3,4,5, 'a', 'b', 1, 3].join(' ').replace(/\D/gm, '').split('')

答案 1 :(得分:1)

您可以使用typeof关键字。和filter()。我已经测试了代码,使其通过了代码战中的所有测试。

使用ES6箭头功能

function filter_list(l) {
  return l.filter(x => typeof x === "number");
}
console.log(filter_list([1,2,'a','b']))

无箭头功能

function filter_list(l) {
  return l.filter(function(x){
      return typeof x === "number"
    });
}
console.log(filter_list([1,2,'a','b']))

使用简单循环

function filter_list(l) {
  let newArr = [];
  for(let i = 0;i<l.length;i++){
    if(typeof l[i] === "number") newArr.push(l[i]);
  }
  return newArr
}
console.log(filter_list([1,2,'a','b']))

答案 2 :(得分:0)

var numberArray: any[];
numberArray.filter(Number)

使用此功能,您可以仅过滤数组中的数字,然后执行您想要的操作。