атрибуты массива фильтров машинопись - PullRequest
0 голосов
/ 30 сентября 2019

У меня было 2 array:

  items = [
    {
      offenceType:"7",
      offenceCode:"JLN14",
    }, 
    {
      offenceType:"48",
      offenceCode:"JLN14",
    }
  ];



  demo = [
    {
      offenceCode: 'JLN14',
      offenceType: '7',
      offenceDesc: 'emergency lane abuse'
    },
    {
      offenceCode: 'JLN14',
      offenceType: '48',
      offenceDesc: 'speeding'
    },
    {
      offenceCode: 'JLN13',
      offenceType: '52',
      offenceDesc: 'parking abuse'
    }
  ];

Как мне отфильтровать некоторые атрибуты между этими 2 array, например: в items получил offenceType и OffenceCode, поэтому мне нужносравните его с demo, который содержит offenceType, offenceCode и offenceDesc, если оба offenceType и offenceCode совпадают, мне нужно получить offenceDesc из demo, основываясь на том, что я гуглил этоэто то, что я пробовал:

  newArray = [];

  // create new array to map 2 objects
  this.items.forEach(x => {
    this.newArray.push(x.offenceCode, x.offenceType);
    console.log('newArray',this.newArray);
    // doing filter
  })

это моя демонстрация stackblitz

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

Ответы [ 4 ]

0 голосов
/ 30 сентября 2019

Вы можете использовать отрицательную логику с методом every().

Соответствующий код:

...

  newArray = [];

  constructor() { }

  ngOnInit() {
    let  foundOffence: any;

    this.items.forEach(itemsOffence => {
      this.demo.every(demoOffence => {
        let isNoMatch: boolean = demoOffence.offenceCode != itemsOffence.offenceCode || demoOffence.offenceType != itemsOffence.offenceType;
        foundOffence = isNoMatch? undefined: demoOffence;
        return isNoMatch;
      })
      if (foundOffence) {
        console.log(`foundOffenceDesc = ${foundOffence.offenceDesc}`);
        this.newArray.push(foundOffence);
      }
    })
    console.log("newArray = ", this.newArray);
  }

...

Вы можете увидеть, как это работает в этой демонстрации StackBlitz

0 голосов
/ 30 сентября 2019

Вы можете определить функцию, которая находит описание нарушения, а затем использовать карту для элементов с этой функцией


const items = [
  {
    offenceType:"7",
    offenceCode:"JLN14",
  }, 
  {
    offenceType:"48",
    offenceCode:"JLN14",
  }
];

function findOffenseDesc(item) {
    const demo = [
        {
          offenceCode: 'JLN14',
          offenceType: '7',
          offenceDesc: 'emergency lane abuse'
        },
        {
          offenceCode: 'JLN14',
          offenceType: '48',
          offenceDesc: 'speeding'
        },
        {
          offenceCode: 'JLN13',
          offenceType: '52',
          offenceDesc: 'parking abuse'
        }
      ];
      const match = demo.find(offense => offense.offenceCode === item.offenceCode && offense.offenceType === item.offenceType);
      return match && match.offenceDesc;
}

const newArray = items.map(findOffenseDesc);
console.log(newArray); // [ "emergency lane abuse", "speeding" ]
0 голосов
/ 30 сентября 2019

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

const offenceDescriptions = demo.filter(
    d => items.find(item => item.offenceCode === d.offenceCode
                         && item.offenceType === d.offenceType))
    .map(x => x.offenceDesc)
0 голосов
/ 30 сентября 2019

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

const items = [
  {
    offenceType:"7",
    offenceCode:"JLN14",
  }, 
  {
    offenceType:"48",
    offenceCode:"JLN14",
  }
];

const demo = [
  {
    offenceCode: 'JLN14',
    offenceType: '7',
    offenceDesc: 'emergency lane abuse'
  },
  {
    offenceCode: 'JLN14',
    offenceType: '48',
    offenceDesc: 'speeding'
  },
  {
    offenceCode: 'JLN13',
    offenceType: '52',
    offenceDesc: 'parking abuse'
  }
];

const newArray = items.map(item => {
   const lookup = demo.find(i => item.offenceType === i.offenceType);
   return {
     offenceType: lookup.offenceType,
     offenceCode: lookup.offenceCode,
     offenceDesc: lookup.offenceDesc
   }
});

console.log(newArray);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...