首页 > 解决方案 > 将展开数组映射到数字

问题描述

映射包含整数和字符串的数组时,我只想转换数字。

假设数组 ['55', 'abc'] 作为参数传递给函数。

如何使用扩展运算符并获得相同的结果?

“运行代码片段”并注意使用扩展运算符,55 不会转换为数字。

console.log(['55', 'abc'].map(val => isNaN(val) ? val : Number(val)))
console.log(...[['55', 'abc']].map(val => isNaN(val) ? val : Number(val)))

标签: javascript

解决方案


如何使用扩展运算符并获得相同的结果?

你不能。Spread(这是语法,而不是运算符)不进行映射。它传播价值观。对于映射,请坚持使用map(代码第一行中的内容)。(或者,如果您从类似数组的东西开始,但实际上不是数组,则可以使用Array.from传入映射回调。但您在示例中的起点是实际数组。)

您的第二行不起作用的原因是您正在调用map外部数组,该数组中有一个数组,所以val回调中就是那个数组。isNaN(['55, 'abc'])最终成为isNaN('55,abc')这是true因为'55,abc'当转换为number类型时是NaN. 所以回调返回内部数组不变。

您的第一行创建了一个新数组,其中的值按照您希望它们的映射方式映射。


推荐阅读