【问题标题】:Turn an Array of Numbers Into a String and Back Into an Array of Numbers Within A Single Function With JavaScript使用 JavaScript 将数字数组转换为字符串并返回到单个函数中的数字数组
【发布时间】:2019-04-24 18:30:36
【问题描述】:

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

我知道这会将一个数字数组变成一个字符串:

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 中的所有其他元素都存在?这对我来说没有意义。

【问题讨论】:

  • 映射到号码:string.split(" ").map(Number)
  • 提示:当你执行parseInt(" ")时会发生什么?
  • 我猜你不必担心两位数?
  • @James 我想说明两位数,是的。我的代码目前不包含两位数怎么办?
  • @HappyHands31 您一次一个字符地遍历字符串是问题所在。

标签: javascript arrays string for-loop


【解决方案1】:

在您的第二次尝试中(使用 parseInt),有两个问题:

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

您应该真正将这个想法与split 尝试结合起来。所以循环遍历应用split(" ")结果

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

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

Number 函数的作用与parseInt 大致相同,只是它不接受多个参数,当您将它作为参数传递给.map() 时这一点很重要。

【讨论】:

    【解决方案2】:

    使用 .map()

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

    【讨论】:

      【解决方案3】:

      两次都使用地图!

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

      【讨论】:

        【解决方案4】:

        在最后一部分中,您尝试将字符串的每个位置转换为整数,包括空格。所以 '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]));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-27
          相关资源
          最近更新 更多