使用filter和map将字符串数组解析/转换为整数

时间:2018-02-20 12:52:42

标签: javascript arrays

前几天我正在考虑一个问题。说我有一个像这样的数组

var vehicles = GameObject.FindGameObjectsWithTag("Vehicle");
foreach(var vehicle in vehicles)
{
    vehicle.GetComponent<CarScript>();
}

我想创建一个类似的数组,我将stringArray中的数组项转换为数字/整数。我可以映射到一个新的数组,使用parseInt解析每个项目或使用+(我真的喜欢这样做)。

var stringArray = ["1","2","3","4","5","6","7","8","9","10"];

现在我想过滤这个,所以我只返回大于5的项目,就像这样......

var numberArray = stringArray.map((n) => +n);

这很好,但我想知道,我是否需要链接.map和.filter,或者我可以使用像这样的单一方法......

var numberArray = stringArray.map((n) => +n).filter((n) => n > 5);

这不会产生预期的结果,返回的是var numberArray = stringArray.filter((n) => { if (+n > 5) { return +n; } }); 任何人都可以看到我出错的地方或者为什么解析不起作用。

2 个答案:

答案 0 :(得分:2)

使用单个循环,您需要在一个步骤中过滤和转换值。只有当值大于所需值时,才可以使用Array#reduce并连接结果数组。如果没有返回临时数组。

&#13;
&#13;
var stringArray = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"],
    numberArray = stringArray.reduce((r, n) => +n > 5 ? r.concat(+n) : r, []);

console.log(numberArray);
&#13;
&#13;
&#13;

答案 1 :(得分:2)

你最后一种方法的问题是filter方法,方法创建一个新数组,其中所有元素都通过了由提供的函数实现的测试, 它只包含返回true的元素,因此undefined将强制为false,任何数字&gt; 0将强制为true。

我将建议@HassanImam提供的示例

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

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