Как l oop создать еще один массив с двумя элементами, когда они повторяются в Javascript? - PullRequest
1 голос
/ 15 апреля 2020

Я хочу создать двумерный массив из другого существующего массива, который извлекается с веб-сайта через document.querySelectorAll (). Я хочу добавить от двух до двух в зависимости от элементов массива. Позвольте мне показать вам пример, чтобы сделать меня более понятным.

myArray = ["price $33", "extra $2", "price $54", "price $20", "extra $3.5", "price $25", "extra $2", "price $31"]

Теоретически, каждые два элемента являются парными (строки с «extra» связаны со строками с «price»). Тем не менее, как вы можете видеть есть цены, которые не имеют дополнений . Каждый дополнительный поставляется с предыдущей ценой. Я хочу добавить цену и ее дополнительные вместе, а также только цену. Вот так:

new array = [["price $33", "extra $2"], ["price $54"], ["price $20", "extra $3.5"], ["price $25", "extra $2"], ["price $31"]]

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Вы можете уменьшить массив и проверить, начинается ли строка с extra, затем pu sh - последний массив добавить новый массив со строкой.

var array = ["price $33", "extra $2", "price $54", "price $20", "extra $3.5", "price $25", "extra $2", "price $31"],
    result = array.reduce((r, s) => {
        if (s.startsWith('extra')) r[r.length - 1].push(s);
        else r.push([s]);
        return r;
    }, []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 15 апреля 2020

Вы можете сделать это с умным использованием reduce, включая флаг, чтобы указать, следует ли пропустить следующий элемент. Примерно так:

var myArray = ["price $33", "extra $2", "price $54", "price $20", "extra $3.5", "price $25", "extra $2", "price $31"];

var newArray = myArray.reduce( (agg, item, index, arr) => {
   if(agg.skipNext)
   {
      agg.skipNext = false;
      return agg;
   }
   if(index < arr.length-1 && arr[index+1].startsWith("extra"))
   {
      agg.skipNext = true;
      agg.push([item,arr[index+1]]);
   }
   else
      agg.push([item]);
   return agg;
},[]);

console.log(newArray);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...