将数组内的数字字符串转换为纯整数数组

时间:2019-07-28 10:07:28

标签: javascript ecmascript-6

我有一个类似[“ 1,2,3,4”]的数组。我只是想将这个数组中的数字转换为像[1,2,3,4]的纯整数数组。

这是我到目前为止尝试过的...

var a = ["1,2,3,4"];
var b = a.map(val => val.split(','));
console.log(b); // prints ["1", "2", "3", "4"]
var c = b.map(x => parseInt(x));
console.log(c); // prints [1]

为什么c仅打印[1],而不循环遍历b数组中的所有元素并打印[1,2,3,4]?

5 个答案:

答案 0 :(得分:3)

按如下所述使用split()

var a = ["1,2,3,4"];
var b = a[0].split(",").map(x=>parseInt(x));
console.log(b);

答案 1 :(得分:1)

  

console.log(b); //打印[“ 1”,“ 2”,“ 3”,“ 4”]

这是不正确的,当您将数组中的字符串映射到数组中时,它实际上会打印[["1", "2", "3", "4"]](二维数组),因此您仍然维护外部数组。

相反,您可以使用.flapMap()将数组.split()的内容映射到外部容器数组,如下所示:

var a = ["1,2,3,4"];
var b = a.flatMap(val => val.split(','));
console.log(b); // prints ["1", "2", "3", "4"]
var c = b.map(x => parseInt(x));
console.log(c); // prints [1, 2, 3, 4]

或者,您也可以在带有JSON.parse的数组字符串上使用.flatMap来获取数字数组,如下所示:

var a = ["1,2,3,4"];
var b = a.flatMap(val => JSON.parse(`[${val}]`));
console.log(b); // [1, 2, 3, 4]

不过请注意,.flatMap()当前确实有limited browser support,因此,如果您有多个元素,则可能要使用.reduce()

var a = ["1,2,3,4"];
var b = a.reduce((acc, val) => [...acc, ...val.split(',')], []);
console.log(b); // prints [["1", "2", "3", "4"]]
var c = b.map(x => parseInt(x));
console.log(c); // prints [1, 2, 3, 4]

使用这两种方法的优点是它适用于a值,其中有多个["1,2,3,4", "5,6,7,8"]等起始字符串。

答案 2 :(得分:0)

您应该执行以下操作:

var a = "1,2,3,4";
var b = a.split(',') // or a[0].split(",") if you really want to use ["1,2,3,4"]
var c = b.map(x => parseInt(x));
console.log(c);

答案 3 :(得分:0)

您可以使用+将字符串隐式转换为数字

var a = ["1,2,3,4"];
var b = a[0].split(',').map(v=> +v);
console.log(b);

答案 4 :(得分:0)

您可以通过获取字符串数组来创建嵌套数组。这将返回一个数组数组。

要克服嵌套数组,您首先需要将其展平,然后使用Number作为回调进行映射

var a = ["1,2,3,4"];
var b = a.flatMap(val => val.split(',')).map(Number);
console.log(b); // [1, 2, 3, 4]