(Javascript) Как я могу разделить строку на основе оператора if, который проверяет число? - PullRequest
0 голосов
/ 07 августа 2020

Итак, я пытаюсь создать функцию, которая может упростить выражения, но я не могу найти способ разделить термины на 2 разных массива (числа и буквы). Результатом кода ниже будет «32xy» вместо просто «32».

Также было бы неплохо узнать, есть ли лучший способ проверить количество или выбор символов в javascript.

var newArr;
var numArr = [];
var letArr = [];
function splitTerm (term) {
    for (var i=0; i<term.length; i++){
        newArr = term.split(''); 
    }
    for (var item of newArr){
        if (item === '0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9') {
            numArr.push(item);
        } else {
            letArr.push(item);
        }
    }
    $('#num').html(numArr.join(''));
}
splitTerm("32xy"); 

Ответы [ 5 ]

3 голосов
/ 07 августа 2020

if (item === '0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9')

Это должно быть

if (['0','1','2','3','4','5','6','7','8','9'].includes(item)) {

Кроме того, вам не нужно делать это oop в верхней части функции.

newArr = term.split(''); можно запустить только один раз.

1 голос
/ 07 августа 2020

Вы можете использовать .replace () с регулярным выражением в своей функции.

console.log("32xy".replace(/[^0-9]/g, '')); // 32
console.log("aaa32xy".replace(/[^0-9]/g, '')); // 32
console.log("aaa3bb2xy".replace(/[^0-9]/g, '')); // 32
1 голос
/ 07 августа 2020

Вот отредактированная версия

var newArr;
var numArr = [];
var letArr = [];
function splitTerm (term) {
    numArr = Array.from(term).filter((elem) => /^[0-9]$/i.test(elem));   
    
    console.log(numArr.join(''));
}
splitTerm("322xy");

, но вы можете использовать значение напрямую без вызова функции;

 $('#num').html(Array.from('32xy').filter((elem) => /^[0-9]$/i.test(elem)).join(''));
 
1 голос
/ 07 августа 2020

Другой вариант - использовать регулярное выражение

const splitTerm = (str) => {
  // Use regexp to extract characters and digits
  return {
    dig: str.match(/\d+/g).join(''),
    char: str.match(/[^\d]+/g).join(''),
  };
};

// Run
const res = splitTerm("32xy");

// Log
console.log(res);
1 голос
/ 07 августа 2020

Ваш код можно улучшить разными способами:

  1. newArr, numArr и letArr используются только внутри функции, поэтому вы должны объявить их внутри функции.
  2. for l oop итерация от 0 до term.length ничего не делает, кроме многократного присвоения того же самого newArr, поэтому этого не должно быть.
  3. Вы можно использовать регулярное выражение, чтобы проверить, является ли что-то числом.
function splitTerm(term) {
    var newArr = term.split("");
    for (var item of newArr) {
        if (/\d/.test(item)) {
            newArr.push(item);
        } else {
            letArr.push(item);
        }
    }
    $("#num").html(numArr.join(""));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...