使用JavaScript在单个函数中将数字数组转换为字符串,然后又转换为数字数组

时间:2019-04-24 18:30:37

标签: javascript arrays string for-loop

基本上,我试图在一个函数中将数字数组转换为字符串,然后再转换为数字数组(与传入的原始数组完全一样)。

我知道这会将数字数组转换为字符串:

function arrayToStringAndBack (array) {
    return array.join(" ");
}

console.log(arrayToStringAndBack([1, 2, 3, 4]));
  

1 2 3 4

但是,现在,如果我想将该字符串转换回数组,这将返回每个数字都带有引号的数组(作为字符串数字数组):

function arrayToStringAndBack (array) {

    let string = array.join(" ");

    return string.split(" ");

}
console.log(arrayToStringAndBack([1, 2, 3, 4]));
  

['1','2','3','4']

想要要做的是将字符串1 2 3 4转换为数字[1, 2, 3, 4]的数组。

我的想法是遍历字符串中的每个元素,使用.parseInt()将元素转换为数字,然后将该数字推入新数组:

function arrayToStringAndBack (array) {

    let string = array.join(" ");

    let newArray = [];

    for (let i = 0; i <= string.length; i++) {
        let number = parseInt(string[i]);
        newArray.push(number);
    }
    return newArray;
}

console.log(arrayToStringAndBack([1, 2, 3, 4]));

但是您可以看到以下日志:

  

[1,NaN,2,NaN,3,NaN,4,NaN]

为什么numbers NaN中的所有其他元素?这对我来说没有意义。

4 个答案:

答案 0 :(得分:2)

第二次尝试(使用parseInt)时,有两个问题:

  • 您进行的迭代次数过多:循环条件中的<=应该为<
  • 您还可以迭代连接字符串中的空格。

您应该将该想法与split尝试真正结合起来。因此,通过应用split(" ")遍历结果

但是可以通过将Number应用于每个带有map的元素来缩短时间:

return string.split(" ").map(Number)

Number函数的作用与parseInt大致相同,不同之处在于它不需要多个参数,当您将其作为参数传递给.map()时,这一点很重要。

答案 1 :(得分:1)

使用.map()

let array = [ '1','2','3','4']
let arrayOfNumbers = array.map( item => parseInt(item))

答案 2 :(得分:1)

两次使用地图!

let array = [1,2,3,222222222];
let arrayOfStrings = array.map(String);
let arrayOfNumbers = arrayOfStrings.map(Number);

console.log(array, arrayOfStrings, arrayOfNumbers);

答案 3 :(得分:1)

在最后一部分中,您尝试将字符串的每个位置转换为整数,包括空格。因此'1 2 3'变成[1,NaN,2,NaN,3],因为空格不能转换为整数。

此代码的修改后的版本应该可以工作: 函数arrayToStringAndBack(数组){

 let string = array.join(" ");
 let numbers = string.split(' ');
 let newArray = [];

    for (let i = 0; i < string.length; i++) {
        let number = parseInt(numbers[i]);
        newArray.push(number);
    }
    return newArray;
}

console.log(arrayToStringAndBack([1, 2, 3, 4]));