Деструктуризация массива по типу номера - PullRequest
3 голосов
/ 20 марта 2019

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

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('');

Ответы [ 5 ]

3 голосов
/ 20 марта 2019

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

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

console.log(typeof row, row);
console.log(typeof col, col);
0 голосов
/ 20 марта 2019

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

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

console.log(typeof columnLetter, typeof row);
0 голосов
/ 20 марта 2019

Если ваша цель - сделать это в одной строке:

doSomethingWithNumbers(coordinate[0], Number(coordinate[1]))
0 голосов
/ 20 марта 2019

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

const coord = 'A5'

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

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

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

const coord = 'A5'

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

console.log(typeof col, col);
console.log(typeof row, row);
0 голосов
/ 20 марта 2019

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

const coordinate = 'a5'; 
[columnLetter,row] = coordinate.split('').map((item) => typeof item == 'number' ? Number(item) : item);
console.log(columnLetter, row)
...