Как поместить каждое значение в массив, который уже сгруппирован по значению?

Я почти решил эту проблему, но у меня есть стек о том, как поместить определенное значение в массив. Идея состоит в том, чтобы «сгруппировать» массив с одинаковым идентификатором и объединить все его значение в одно свойство, в этом случае «символ "свойство, это уже сделано, мне удалось это решить. Теперь проблема в том, что я не могу получить значение свойства роли, как я могу его получить? Я пробовал карту, но получил массив ролей от индекса 0 до 2. Я также пробовал _.forEach, но тот же результат с использованием lodash.

var groupArr = [ { id: 'Jesse', role: 'merchant', character: 'Orc', }, { id: 'David', role: 'hero', character: 'Blade Knight', }, { id: 'Jesse', role: 'merchant', character: 'Elf', }, { id: 'Steve', role: 'villain', character: 'Undead OverLord', }, { id: 'Jesse', role: 'merchant', character: 'Wizard', }, ]

var output = _(groupArr).groupBy(a => a.id).map((objs, key) => ({
        'id': key,
        'role': key,
        'character': _.map(objs, 'character')
    }))
    .value();

console.log(output);

При слиянии следует ли заменять значение, если оно существует?

Muhammad Usman 22.05.2019 17:02

@ Джесси - каков ожидаемый результат? Можете ли вы добавить пример?

Ori Drori 22.05.2019 17:06

Роль должна быть торговцем в массиве с индексом 0, в массиве с индексом 1 роль должна быть героем, массив с индексом 2 = злодей.

user-9725874 22.05.2019 17:08
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Сравнение структур данных: Массивы и объекты в Javascript
Сравнение структур данных: Массивы и объекты в Javascript
Итак, вы изучили основы JavaScript и хотите перейти к изучению структур данных. Мотивация для изучения/понимания Структур данных может быть разной,...
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Прошлая статья была первой из цикла статей о создании системы электронной коммерции с использованием Keystone.js, и она была посвящена главным образом...
Приложение для отслеживания бюджета на React js для начинающих
Приложение для отслеживания бюджета на React js для начинающих
Обучение на практике - это проверенная тема для достижения успеха в любой области. Если вы знаете контекст фразы "Практика делает человека...
Стоит ли использовать React в 2022 году?
Стоит ли использовать React в 2022 году?
В 2022 году мы все слышим о трендах фронтенда (React, Vue), но мы не знаем, почему мы должны использовать эти фреймворки, когда их использовать, а...
2
3
42
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Можно взять роль из 1-го пункта в группе:

var groupArr = [ { id: 'Jesse', role: 'merchant', character: 'Orc', }, { id: 'David', role: 'hero', character: 'Blade Knight', }, { id: 'Jesse', role: 'merchant', character: 'Elf', }, { id: 'Steve', role: 'villain', character: 'Undead OverLord', }, { id: 'Jesse', role: 'merchant', character: 'Wizard', }, ]

var output = _(groupArr)
  .groupBy('id')
  .map((objs, key) => ({
    'id': key,
    'role': _.head(objs).role,
    'character': _.map(objs, 'character')
  }))
  .value();

console.log(output);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

свойство роли должно быть значением роли

user-9725874 22.05.2019 17:09

Хорошо, ты попал.

user-9725874 22.05.2019 17:10

Вы спросили, что это «groupBy», я позволю вам сделать «слияние»

var groupArr = [
    { id: 'Jesse', role: 'merchant', character: 'Orc', },
    { id: 'David', role: 'hero', character: 'Blade Knight', },
    { id: 'Jesse', role: 'merchant', character: 'Elf', },
    { id: 'Steve', role: 'villain', character: 'Undead OverLord', },
    { id: 'Jesse', role: 'merchant', character: 'Wizard', }
];


let byId = groupArr.reduce( (acc, i) => {
    acc[i.id] = acc[i.id] || [];
    acc[i.id].push(i);
    return acc;
}, {});


Object.keys(byId).forEach(id => {
   let values = byId[id];
   //Do the merge
});

Можно и так сделать

let merged = [... newSet(groupArr.map(e => e.id))]
.map( id => {
    let values = groupArr.filter( e => e.id === id );
    let merge = {}; //You do
    return merge;
});

Это нормально, но как это сделать в lodash?

user-9725874 22.05.2019 17:05

Мне было непонятно, что lodash обязателен. Поскольку я никогда не использовал его, я не могу сказать. К сожалению :-/

farvilain 22.05.2019 17:11

Другие вопросы по теме