Как сделать значение объекта в качестве ключа другого объекта массива? - PullRequest
0 голосов
/ 18 февраля 2020

Я получаю данные в виде массива объектов, подобных этому ...

 let array = [{serviceId:2,name:'ahsan'}, {serviceId:5,name:'majeed'}, 
              {serviceId:2,name:'john'}, {serviceId:5,name:'ziyad'}];

Мне нужен этот массив в этой форме, пожалуйста, помогите кому-нибудь ...

 let arrayIWant = [
                    { 
                      2:[{serviceId:2,name:'ahsan'},{serviceId:2,name:'john'}], 
                      5:[{serviceId:5,name:'majeed'},{serviceId:5,name:'ziyad'}]
                    } 
                  ] 

Пожалуйста, помогите

Ответы [ 4 ]

0 голосов
/ 18 февраля 2020

Вы можете использовать метод _.keyBy библиотеки loda sh

_. KeyBy (array, 'serviceId');

const _ = require('lodash')
let array = [{serviceId:2,name:'ahsan'}, {serviceId:5,name:'majeed'}, 
              {serviceId:2,name:'john'}, {serviceId:5,name:'ziyad'}];

result = _.keyBy(array, 'serviceId');

console.log([result])

проверить это. Это должно дать вам желаемый результат.

0 голосов
/ 18 февраля 2020

вы можете попробовать вот так, чтобы получить ожидаемый результат

    const array = [{serviceId:2,name:'ahsan'}, {serviceId:5,name:'majeed'}, 
                  {serviceId:2,name:'john'}, {serviceId:5,name:'ziyad'}];
    const iteratedArray = array.reduce((acc,val) => {
      const key = val.serviceId;
       if (!acc[key]) acc[key] = [];
       acc[key].push(val);
       return acc; 
    },{});
    const arrayIWant = [iteratedArray];
    console.log(arrayIWant);

0 голосов
/ 18 февраля 2020

Насколько я понимаю, вы хотите сгруппировать массив объектов по serviceId. Для этого вы можете использовать метод groupBy из loda sh https://lodash.com/docs/#groupBy

или написать свою собственную реализацию, например:

var groupBy = function(xs, key) {
  return xs.reduce(function(rv, x) {
    (rv[x[key]] = rv[x[key]] || []).push(x);
    return rv;
  }, {});
};

var data = [{serviceId:2,name:'ahsan'}, {serviceId:5,name:'majeed'}, 
          {serviceId:2,name:'john'}, {serviceId:5,name:'ziyad'}];
console.log(groupBy(data, 'serviceId'));

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

0 голосов
/ 18 февраля 2020
  1. Итерация по всем элементам в массиве.
  2. Для каждого элемента:
    • Если serviceId не существует в качестве опоры объекта, установите опору serviceId ключ с массивом, содержащим элемент.
    • Если он существует, добавьте элемент в этот массив.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...