前几天我正在考虑一个问题。说我有一个像这样的数组
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;
}
});
任何人都可以看到我出错的地方或者为什么解析不起作用。
答案 0 :(得分:2)
使用单个循环,您需要在一个步骤中过滤和转换值。只有当值大于所需值时,才可以使用Array#reduce
并连接结果数组。如果没有返回临时数组。
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;
答案 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);
console.log(["1","2","3","4","5","6","7","8","9","10"].map(Number).filter(n => n > 5));
&#13;