Как объединить одинаковые строки в массиве? - PullRequest
0 голосов
/ 14 мая 2019

Я делаю свой первый проект в качестве продовольственного рота, который выдает список покупок из выбранных ингредиентов Рецепта. Мне удалось написать loop, в котором все ингредиенты были бы объединены в один array, и это привело нас к моему вопросу.

Я хотел бы объединить одни и те же ингредиенты в массиве, например: [1kg Carrots, 1kg Spinach, 1kg Carrots], я бы хотел объединить повторяющиеся (1kg Carrots, 1kg Carrots) в (2kg Carrots)

Есть ли способ сделать это?

Извините, если мой запрос неаккуратный, впервые задаю вопрос.

Я мог бы обработать его так, чтобы он отменил аналогичные, так как результат [1kg Carrots, 1kg Carrots] будет [1kg Carrot].

К сожалению, я сейчас на работе и не имею доступа - обновлю при необходимости.

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Скорее всего, я бы создал объект из массива.

const arr = ['1kg Carrots', '1kg Spinach', '1kg Carrots'];
let obj = {};

arr.forEach(element => {
 let [kg, item] = element.split(' ');

 kgNum = parseInt(kg);

 if(Object.keys(obj).includes(item)){
  return obj[item] += kgNum;
 } else {
   obj[item] = kgNum;
 }
})
obj
// #=>  { Carrots: 2, Spinach: 1 }
  1. Я зацикливаюсь на массиве
  2. Я разделил элемент (например, «1 кг моркови») на вес и предмет
  3. тогда я вывожу 1 кг в целое число
  4. Я проверяю, есть ли у obj ключ item, и если нет, я добавляю его
  5. Если он уже существует, я просто увеличиваю kgNum
  6. и затем я возвращаю объект

Это хорошее место для начала, и вы можете немного поработать над тем, как добавить обратно kg :)

1 голос
/ 14 мая 2019

это можно сделать за 2 шага

var arr = ["1kg Carrots", "1kg Spinach", "1kg Carrots"]

шаг 1: подсчитать общее количество кг

var arrCount = arr.reduce((ac, val)=> {
    var [kg, key] = val.split(' ')
    kg = parseFloat(kg) 
    ac[key] = ac[key]? ac[key]+kg : kg;
    return ac 
}, {}) // { Carrots: 2, Spinach: 1 }

шаг 2: вернуть его в массив

var out  = Object.entries(arrCount).map(([key, kg])=> `${kg}kg ${key}`)
// [2kg Carrots, 1kg Carrots] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...