Группа By в Лодаше с условием - PullRequest
0 голосов
/ 24 октября 2019
[ { id: 4,
    category_id: 7,
    user_id: 2,
    title: '',
    image1: '15717679702861gohz24vrk2262fov.jpg',
    image2: '15717679702891gohz24vrk2262fox.jpg',
    image3: '15717679702911gohz24vrk2262foz.jpg',
    image4: '15717679702921gohz24vrk2262fp0.jpg',
    image5: '15717679702931gohz24vrk2262fp1.jpg',
    status: 2,
    created_at: 2019-10-22T18:12:50.000Z,
    updated_at: 2019-10-22T18:12:50.000Z,
    item_id: 1,
    category_field_id: 4,
    value: 'Iphone',
    is_title: 1,
    is_description: 0 },
  { id: 3,
    category_id: 7,
    user_id: 2,
    title: '',
    image1: '15717679702861gohz24vrk2262fov.jpg',
    image2: '15717679702891gohz24vrk2262fox.jpg',
    image3: '15717679702911gohz24vrk2262foz.jpg',
    image4: '15717679702921gohz24vrk2262fp0.jpg',
    image5: '15717679702931gohz24vrk2262fp1.jpg',
    status: 2,
    created_at: 2019-10-22T18:12:50.000Z,
    updated_at: 2019-10-22T18:12:50.000Z,
    item_id: 1,
    category_field_id: 3,
    value: 'Other',
    is_title: 0,
    is_description: 0 },
  { id: 11,
    category_id: 7,
    user_id: 2,
    title: '',
    image1: '15718960965161gohz24rzk24acmit.jpg',
    image2: '15718960965181gohz24rzk24acmiu.jpg',
    image3: '15718960965191gohz24rzk24acmiv.jpg',
    image4: '15718960965201gohz24rzk24acmiw.jpg',
    image5: '15718960965221gohz24rzk24acmiy.jpg',
    status: 0,
    created_at: 2019-10-24T05:48:16.000Z,
    updated_at: 2019-10-24T05:48:16.000Z,
    item_id: 3,
    category_field_id: 3,
    value: 'Other',
    is_title: 0,
    is_description: 0 } ]

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

подобно

{
 1: [{ id: 4,
    category_id: 7,
    user_id: 2,
    title: '',
    image1: '15717679702861gohz24vrk2262fov.jpg',
    image2: '15717679702891gohz24vrk2262fox.jpg',
    image3: '15717679702911gohz24vrk2262foz.jpg',
    image4: '15717679702921gohz24vrk2262fp0.jpg',
    image5: '15717679702931gohz24vrk2262fp1.jpg',
    status: 2,
    created_at: 2019-10-22T18:12:50.000Z,
    updated_at: 2019-10-22T18:12:50.000Z,
    item_id: 1,
    category_field_id: 4,
    value: 'Iphone',
    is_title: 1,
    is_description: 0 },
  { id: 3,
    category_id: 7,
    user_id: 2,
    title: '',
    image1: '15717679702861gohz24vrk2262fov.jpg',
    image2: '15717679702891gohz24vrk2262fox.jpg',
    image3: '15717679702911gohz24vrk2262foz.jpg',
    image4: '15717679702921gohz24vrk2262fp0.jpg',
    image5: '15717679702931gohz24vrk2262fp1.jpg',
    status: 2,
    created_at: 2019-10-22T18:12:50.000Z,
    updated_at: 2019-10-22T18:12:50.000Z,
    item_id: 1,
    category_field_id: 3,
    value: 'Other',
    is_title: 0,
    is_description: 0 }
    ]
}

Ответы [ 3 ]

1 голос
/ 24 октября 2019

По умолчанию lodash не предоставляет нужную вам функцию.

Вместо этого вы можете попробовать объединить функции _groupBy и _pickBy.

var groupedItems = _.groupBy(items, 'item_id');

var userSearchLength = 2;

var filteredGrouping = _.pickBy(groupedItems, function(value, key) {
  return value.length == userSearchLength;
});
1 голос
/ 24 октября 2019
const userInputNumber = 2;
let grouped =_groupBy(obj,(o)=> o.item_id)
Object.keys(grouped).forEach(item_id=> {
 if(grouped[item_id].length !== userInputNumber){
   delete grouped[item_id];
 }
})

Сначала нужно сгруппировать, а затем проверить и удалить группы, длина которых не соответствует желаемому массиву.

0 голосов
/ 24 октября 2019

Надеюсь, это вам поможет.

Сначала вы можете сгруппировать данные, а затем отфильтровать данные, которые вам нужны.

const givenLength = 2;
const groupData =_.groupBy(data,(o)=> o.item_id);
const filtered = _.filter(groupData, (o) => o.length === givenLength );
...