#javascript #arrays
#javascript #массивы
Вопрос:
Я пытаюсь объединить 2-й и 3-й элементы в один в массиве, то есть: [567, «O / S», ‘1,111’]
Возможные строки: 567/ O / S/1,111 / 5/ O/S/1,111 (первый элемент в массиве может иметь длину до 4 цифр)
У меня это работает ниже, но это не очень красноречивое решение, есть ли лучший способ сделать это? Возможно, функция массива es6?
var array = '567/O/S/1,111'.split('/')
if(array.length > 3) {
var text1 = array[1];
var text2 = array[2];
var joinedText = `${text1}/${text2}`;
array.splice(1,2);
array.splice(1, 0, joinedText);
}
console.log(array) //[567, "O/S", '1,111']
Ответ №1:
Вы можете использовать регулярное выражение либо для сопоставления буквы, за которой следует косая черта и другая буква, либо для чего угодно, кроме косой черты:
console.log(
'567/O/S/1,111'.match(/[a-z]/[a-z]|[^/] /gi),
);
console.log(
'5/O/S/1,111'.match(/[a-z]/[a-z]|[^/] /gi),
);
[a-z]/[a-z]
— буква, за которой следует косая черта, за которой следует другая буква[^/]
— один или несколько символов без косой черты
Комментарии:
1. Это не сработает, если после разделения будет 3 фрагмента.
567/O/1,111
. OP имеетif(array.length > 3)
в своем коде2. Это действительно хорошо, спасибо! Я должен был упомянуть, что первый элемент в массиве может иметь длину от 1 до 4 цифр, что приводит к сбою приведенного выше выражения регулярного выражения [«5 / O», «S / 1», «,111» ]
3. @NoDachi Смотрите редактирование, я думаю, вам нужно
[a-z]
вместоw