Как сгруппировать элемент по идентификатору только с элементом, у которого нет parentId, и элемент с parentId сохранит первый элемент?

У меня есть коллекция, подобная приведенной ниже, с коллекцией, и я хочу сгруппировать ее с идентификатором, который у элемента нет parentId. Может мне помочь?

let item=[
             {id:'001', name:'A', qty:10,},
             {id:'002', name:'B', qty:5, parentId:'001'},
             {id:'003', name:'C', qty:8, parentId:'001'},
             {id:'001', name:'A', qty:-5,},
             {id:'002', name:'B', qty:-5, parentId:'001'},
             {id:'003', name:'C', qty:-8, parentId:'001'}
             ]

Я хочу сгруппировать только элемент без parentId, это мой результат.

let item=[
             {id:'001', name:'A', qty:5,},                 
             {id:'002', name:'B', qty:5, parentId:'001'},
             {id:'003', name:'C', qty:8, parentId:'001'}
         ]

вы можете прочитать код здесь и узнать, как это сделать, хотя это не совсем то, что вам нужно: stackoverflow.com/questions/34523003/…

Aᴍɪʀ 22.10.2018 07:05
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
66
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

let item = [{
    id: '001',
    name: 'A',
    qty: 10,
  },
  {
    id: '002',
    name: 'B',
    qty: 5,
    parentId: '001'
  },
  {
    id: '003',
    name: 'C',
    qty: 8,
    parentId: '001'
  },
  {
    id: '001',
    name: 'A',
    qty: -5,
  },
  {
    id: '002',
    name: 'B',
    qty: -5,
    parentId: '001'
  },
  {
    id: '003',
    name: 'C',
    qty: -8,
    parentId: '001'
  }
]

item = item.reduce((a, c) => {
  const ex = a.find((v) => v.id === c.id)
  if (ex) {
    if (!ex.parentId) {
      ex.qty += c.qty;
    }
  } else {
    a.push(c);
  }
  return a;
}, [])

console.info(item);

Можете ли вы пример с совокупным

Aneat Tea 22.10.2018 07:39

Что вы имеете в виду под совокупностью? В javascript такого метода нет. @AneatTea

ZeroCho 22.10.2018 08:04

Глядя на теги, вопрос, по-видимому, сосредоточен на решении mongoDB. ОП задал вопрос запутанным образом и добавил тег js.

Ayush Gupta 22.10.2018 08:08

Я хочу, чтобы элемент с parentId получил только положительное число?

Aneat Tea 22.10.2018 10:14
Ответ принят как подходящий

Вы можете использовать

db.collectionName.aggregate([
    {
        $group: {
            "_id": {
                "id": "$id",
                "parentId": "$parentId"
            },
            qtyArray: {
                $push: {
                    "qty": "$qty",
                }
            }
        }
    },
    {
        $project: {
            count: {
                $cond: [
                    {
                        $not: ["$_id.parentId"]
                    }, 
                    {
                        "qtyTotal": { $sum: "$qtyArray.qty" }
                    },
                    {
                        $arrayElemAt: [ "$qtyArray", 0 ]
                    }
                ]
            }

        }
    }
])

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