Превратить массив чисел в строку и обратно в массив чисел в одной функции с помощью JavaScript - PullRequest
0 голосов
/ 24 апреля 2019

По сути, я пытаюсь превратить массив чисел в строку, а затем обратно в массив чисел (точно так же, как исходный массив, который был передан) в пределах одной функции.

Я знаю, что это превратит массив чисел в строку:

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 ]

2 голосов
/ 24 апреля 2019

Во второй попытке (с parseInt) есть две проблемы:

  • Вы делаете одну итерацию слишком много: <= в условии цикла должно быть <.
  • Вы также перебираете пробелы в объединенной строке.

Вы должны действительно объединить идею с попыткой split. Так что циклически по результату от применения split(" ").

Но это можно сделать короче, применив Number к каждому элементу с помощью map:

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

Функция Number работает примерно так же, как и parseInt, за исключением того, что она не принимает более одного аргумента, что важно, когда вы передаете ее в качестве аргумента .map().

1 голос
/ 24 апреля 2019

В последней части вы пытаетесь преобразовать каждую позицию строки в целые числа, включая пробелы.Поэтому '1 2 3' превращается в [1, NaN, 2, NaN, 3], потому что пробелы не могут быть преобразованы в целые числа.

Эта измененная версия вашего кода должна работать: function arrayToStringAndBack (array) {

 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]));
1 голос
/ 24 апреля 2019

Используйте карту оба раза!

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

console.log(array, arrayOfStrings, arrayOfNumbers);
1 голос
/ 24 апреля 2019

Использовать .map ()

let array = [ '1','2','3','4']
let arrayOfNumbers = array.map( item => parseInt(item))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...