#javascript #arrays #string #for-loop
#javascript #массивы #строка #for-цикл
Вопрос:
По сути, я пытаюсь превратить массив чисел в строку, а затем обратно в массив чисел (точно такой же, как исходный массив, который был передан) в рамках одной функции.
Я знаю, что это превратит массив чисел в строку:
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
? Для меня это не имеет смысла.
Комментарии:
1. сопоставление с числом:
string.split(" ").map(Number)
2. Подсказка: что произойдет, когда вы это сделаете
parseInt(" ")
?3. Я полагаю, вам не нужно беспокоиться о двузначных числах?
4. @James Я хотел бы учитывать двузначные числа, да. Как насчет того, что мой код в настоящее время не учитывает двузначные числа?
5. @HappyHands31 Проблема в том, что вы просматриваете строку по одному символу за раз.
Ответ №1:
При вашей второй попытке (с помощью parseInt) возникают две проблемы:
- Вы выполняете на одну итерацию слишком много:
<=
в условии цикла должно быть<
. - Вы также выполняете итерацию пробелов, которые находятся в объединенной строке.
Вам действительно следует объединить идею с 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:
Используйте map оба раза!
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]));