Сравнение 2-х массивов для создания 3-го массива общих элементов в Angular - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь выяснить логику TypeScript, чтобы сравнить 2 массива и создать 3-й массив всех общих элементов.

т.е.

employees: any;
  offices: any;
  constructor() {
    this.employees = [
      { fname: "John", lname: "James", state: "New York" },
      { fname: "John", lname: "Booth", state: "Nebraska" },
      { fname: "Steve", lname: "Smith", state: "Nebraska" },
      { fname: "Stephanie", lname: "Smith", state: "New Hampshire" },
      { fname: "Bill", lname: "Kydd", state: "New Mexico" },
      { fname: "Bill", lname: "Cody", state: "Wyoming" }
    ]

    this.offices = [
      { state: "New York", city: "Albany" },
      { state: "Nebraska", city: "Omaha" },
      { state: "New Mexico", city: "Albuquerque" },
      { state: "New Hamshire", city: "Manchester" },
      { state: "California", city: "Redding" }
    ]
let finalOffice = this.employees.filter((state: any) => !this.offices.include(state));
console.log(finalOffice);

}

В идеале третий массив должен выглядеть примерно так:

empofclist = [
  {state: "New York", city: "Albany", fname: "John",lname: "James"},
  {state: "Nebraska", city: "Omaha",fname: "John",lname: "Booth"},
  {state: "Nebraska", city: "Omaha",fname: "Steve",lname: "Smith"},
  {state: "New Mexico", city: "Albuquerque",fname: "Bill",lname: "Kydd"},
  {state: "New Hamshire",city: "Manchester",fname: "Stephanie",lname: "Smith"}
]

Обратите внимание, что есть копия штата Небраска, по одному на каждого человека, и нет списка для Калифорнии, поскольку там нет ни одного сотрудника, и нет списка для Билла Коди, поскольку в Вайоминге нет офиса.

Любые предложения о том, где я могу найти информацию об этом?

1 Ответ

0 голосов
/ 06 марта 2019
            this.employees = [
                  { fname: "John", lname: "James", state: "New York" },
                  { fname: "John", lname: "Booth", state: "Nebraska" },
                  { fname: "Steve", lname: "Smith", state: "Nebraska" },
                  { fname: "Stephanie", lname: "Smith", state: "New Hampshire" },
                  { fname: "Bill", lname: "Kydd", state: "New Mexico" },
                  { fname: "Bill", lname: "Cody", state: "Wyoming" }
            ];


            this.offices = [
                  { state: "New York", city: "Albany" },
                  { state: "Nebraska", city: "Omaha" },
                  { state: "New Mexico", city: "Albuquerque" },
                  { state: "New Hampshire", city: "Manchester" },
                  { state: "California", city: "Redding" }
            ]

            let finalArr = [];
            let self = this;
            for (let g=0;g<self.employees.length;g++) {
                    for (let h=0;h<self.offices.length;h++) {
                            if (self.employees[g]['state'] === self.offices[h]['state']) {
                                    finalArr.push(self.employees[g]);
                                    finalArr[finalArr.length - 1]['city'] = self.offices[h]['city'];
                                    break;
                            }
                    }
            }

console.log (finalArr);

Вы можете попробовать что-то вроде этого.

...