Деструктуризация массива в числовой тип

У меня есть строка вроде:

const coordonate = 'a5'; 

Я хочу разделить букву, которая будет преобразована последней, на число, представляющее столбец, и <5>, представляющее строку.

Для этого я делаю что-то вроде этого:

[columnLetter, row] = coordinate.split('');

column = getColumnByLetter(columnLetter); // Returns a number.

....

result = doSomethingWithNumbers(column, row); // The problem is row is a String.

Я мог бы сделать:

result = doSomethingWithNumbers(column, Number(row));

Но мне интересно, есть ли способ получить прямую строку как число... Что-то типа:

[columnLetter, Number(row)] = coordinate.split('');
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
0
313
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вы можете проверить значение с помощью isNaN и взять числа или строки для значений NaN.

var string = 'a5',
    [row, col] = string.split('').map(v => isNaN(v) ? v : +v);
    

console.info(typeof row, row);
console.info(typeof col, col);

вы также можете использовать индекс для преобразования в число, поэтому .map((v,i)=>i?+v:v) тоже должно работать

Markus Madeja 20.03.2019 15:14

Я думал о том, прежде чем это придет в голову. я нахожу это решение более общим.

Nina Scholz 20.03.2019 15:17

Это хорошая идея отобразить его перед деструкцией, но я подумал, может ли сам деструктор это сделать ?? Например, получить его напрямую, как и ожидалось...

V. Sambor 20.03.2019 16:00

при деструктуризации LHS невозможна никакая другая операция, кроме присваивания или дальнейшей деструктуризации. (LHS = левая сторона)

Nina Scholz 20.03.2019 16:01

Вы можете использовать функцию карты.

const coordinate = 'a5'; 
[columnLetter,row] = coordinate.split('').map((item) => typeof item == 'number' ? Number(item) : item);
console.info(columnLetter, row)
Ответ принят как подходящий

Просто переназначьте переменную:

const coord = 'A5'

let [ col, row ] = coord.split('')
row = Number(row)

console.info(typeof col, col);
console.info(typeof row, row);

Или сопоставьте значения:

const coord = 'A5'

const [col, row] = coord.split('').map(i => +i || i)

console.info(typeof col, col);
console.info(typeof row, row);

Если ваша цель состоит в том, чтобы сделать это в одной строке:

doSomethingWithNumbers(coordinate[0], Number(coordinate[1]))

Я не хочу бросать его все время, где я его использую, но меня больше интересовала идея, чем решение этой проблемы... (что может быть тривиально)

V. Sambor 20.03.2019 16:02

Вы можете использовать Array.from для создания массива из вашей строки координат, где каждый символ приводится к числу или остается как строка:

const coordinate = 'a5';
[columnLetter, row] = Array.from(coordinate, c => +c || c); // [str: 'a', num: 5]

console.info(typeof columnLetter, typeof row);

Другие вопросы по теме