Javascript 使用过滤器和映射将字符串数组解析/转换为整数

Javascript 使用过滤器和映射将字符串数组解析/转换为整数,javascript,arrays,Javascript,Arrays,前几天我在想一个问题。假设我有一个这样的数组 var stringArray = ["1","2","3","4","5","6","7","8","9","10"]; 我想创建一个类似的数组,将stringArray中的数组项转换为数字/整数。我可以映射到一个新数组,使用parseInt或+解析每个项,我非常喜欢这样做 var numberArray = stringArray.map((n) => +n); 现在我想过滤这个,所以我只返回大于5的项目,就像这样 var number

前几天我在想一个问题。假设我有一个这样的数组

var stringArray = ["1","2","3","4","5","6","7","8","9","10"];
我想创建一个类似的数组,将stringArray中的数组项转换为数字/整数。我可以映射到一个新数组,使用parseInt或+解析每个项,我非常喜欢这样做

var numberArray = stringArray.map((n) => +n);
现在我想过滤这个,所以我只返回大于5的项目,就像这样

var numberArray = stringArray.map((n) => +n).filter((n) => n > 5);
var numberArray = stringArray.filter((n) => {
  if (+n > 5) {
    return +n;
  }
}); 
这是伟大的,但我想知道,我是否需要链的.map和.filter或我可以使用一个单一的方法像这样

var numberArray = stringArray.map((n) => +n).filter((n) => n > 5);
var numberArray = stringArray.filter((n) => {
  if (+n > 5) {
    return +n;
  }
}); 

这并没有给出期望的结果,返回的是[6,7,8,9,10]任何人都可以看到我哪里出了问题,或者为什么解析不起作用。

对于单个循环,您需要一步过滤和转换值。只有当值大于所需值时,才可以使用和concat结果数组。如果不是,则返回临时数组

var stringArray=[1,2,3,4,5,6,7,8,9,10], numberArray=stringArray.reducer,n=>+n>5?r、 concat+n:r,[];
console.lognumberArray 上一种方法中的问题是,filter方法,method创建一个新数组,其中包含通过所提供函数实现的测试的所有元素, 它只包含返回true的元素,因此undefined将强制为false,任何大于0的数字都将强制为true

我将推荐@Hassaniam提供的示例

["1","2","3","4","5","6","7","8","9","10"].map(Number).filter(n => n > 5);

log[1,2,3,4,5,6,7,8,9,10].mapNumber.filtern=>n>5;如果要使用单一方法,则可以使用parsetInt方法。arrayfilter返回条件为true的数组子集。也许您可以试试[1,2,3,4,5,6,7,8,9,10]。mapNumber.filtern=>n>5map返回一个新数组,其中的元素由指定的函数处理,因此您的字符串是新数组中的整数。但是,与map不同,filter在返回新数组的同时,只返回指定函数返回true的元素,但在返回之前不能更改实际值。是否需要将.map和.filter链接起来?从技术上讲,您不需要,但是这样更好。嗨,你能解释一下为什么连接的字符串会转换成数组吗?很好的方法,顺便说一句……这是一个与数字相关的数组,因为累加器的initalValue。现在您正在使用reduce和concat,我假设如果OP的最初目的是看看是否可以用1个方法而不是2个方法来完成,即:map和filter,它仍然是相同的差异。map转换为数字,用于每个图元和过滤器,但不转换图元。需要两个循环才能得到结果。reduce只是数组函数中的一把瑞士刀,因为您可以更改结果并在之前进行一些测试。