Объединение элементов в массиве

#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