Как вернуть 1 массив из 2 массивов, основываясь на разных свойствах каждого массива в lodash? - PullRequest
0 голосов
/ 25 октября 2019

Lodash v 4.17.15

Допустим, у меня есть 2 массива

var users = [{
      id: 12,
      name: Adam
   },{
      id: 14,
      name: Bob
   },{
      id: 16,
      name: Charlie
   },{
      id: 18,
      name: David
   }
]


var jobs = [{
      empid: 12,
      profession: Engineer
   },{
      empid: 14,
      profession: CEO
   },{
      empid: 16,
      profession: CFO
   },{
      empid: 18,
      profession: CTO
   }
]

Ожидаемый результат

var jobsEmp= [{
          empid: 12,
          id: 12,
          name: Adam
          profession: Engineer
       },{
          empid: 14,
          id: 14,
          name: Bob
          profession: CEO
       },{
          empid: 16,
         id: 16,
          name: Charlie
          profession: CFO
       },{
          empid: 18,
          id: 18,
          name: David
          profession: CTO
       }
    ]

Я обычно делаю это:

var jobsEmp =  _.forEach(users, function (emp) {
                    emp.jobs = _.find(jobs, function (jb) {
                        return jb.empid === emp.id;
                    });
                });

Но я заметил, что это не самый лучший способ, я давно читал документацию, но я просто не знаю, что такое техникалучшее, как это правильно сделать в lodash?

Ответы [ 2 ]

2 голосов
/ 25 октября 2019

Вы можете делать это, но IMO, что угодно, чтобы сделать его более читабельным для вас и вашей команды. я бы предпочел метод с более высокой читаемостью

const _ = require('lodash')

const users = [{
      id: 12,
      name: 'Adam'
   },{
      id: 14,
      name: 'Bob'
   },{
      id: 16,
      name: 'Charlie'
   },{
      id: 18,
      name: 'David'
   }
]


const jobs = [{
      empid: 12,
      profession: 'Engineer'
   },{
      empid: 14,
      profession: 'CEO'
   },{
      empid: 16,
      profession: 'CFO'
   },{
      empid: 18,
      profession: 'CTO'
   }
]

const merged = _.merge(_.keyBy(users, 'id'), _.keyBy(jobs, 'empid'));
const values = _.values(merged);
console.log(values);

вывод

[ { id: 12, name: 'Adam', empid: 12, profession: 'Engineer' },
  { id: 14, name: 'Bob', empid: 14, profession: 'CEO' },
  { id: 16, name: 'Charlie', empid: 16, profession: 'CFO' },
  { id: 18, name: 'David', empid: 18, profession: 'CTO' } ]
0 голосов
/ 25 октября 2019

Без использования Лодаш :

const users = [{
  id: 12,
  name: "Adam"
}, {
  id: 14,
  name: "Bob"
}, {
  id: 16,
  name: "Charlie"
}, {
  id: 18,
  name: "David"
}];


const jobs = [{
  empid: 12,
  profession: "Engineer"
}, {
  empid: 14,
  profession: "CEO"
}, {
  empid: 16,
  profession: "CFO"
}, {
  empid: 18,
  profession: "CTO"
}];

const result = users.map((user) => {
  const job = jobs.find((job) => job.empid === user.id);

  return Object.assign({}, user, job);
});

console.log(result);
...