Возврат родительского совпадения во вложенном цикле с использованием ES6 - PullRequest
0 голосов
/ 02 января 2019

У меня есть массив объектов региона, каждый из которых содержит массив стран.Я хочу вернуть регион, как только один из его кодов страны совпадет с предварительно заполненным this.isoCodes.code.Текущий код использует вложенный цикл с перерывами, но он грязный.Ищите более чистое решение с ES6, если это возможно.Я знаю, что есть такие вещи, как .map с .every или .some, но не уверен, что даст мне правильный результат.

Текущий рабочий код выглядит как

let result;

for (let i=0; i<regions.length; i++) {
  for (let j=0; j<regions[i].countries.length; j++) {
    let country = regions[i].countries[j];
    if (country.iso2 === this.isoCodes.code || country.iso3 === this.isoCodes.code) {
      result = regions[i];
      break;
    }
  }
  if (result) {
    break;
  }
}
if (result) {
  this.region = result;
  return result;
} else {
  return false;
}

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Вы можете использовать _.find () из библиотеки js lodash :

var users = [
{ 'user': 'barney',  'age': 36, 'active': true },
{ 'user': 'fred',    'age': 40, 'active': false },
{ 'user': 'pebbles', 'age': 1,  'active': true }
];

_.find(users, function(o) { return o.age < 40; });
0 голосов
/ 02 января 2019
// assuming this is similar to the data
const isoCodes = {
  code: 'foo',
};

const regions = [
  {
    countries: [
      { iso2: 'foo', iso3: 'foo' },
      { iso3: 'bar' },
    ],
  },
];

return regions.reduce((acc, region) => {
  // already found region, skip
  if(acc) {
    return acc;
  }

  // check if any country matches in region, if so we use it
  const [first] = region.countries.filter(({ iso2, iso3 }) => 
    (iso2 === isoCodes.code || iso3 === isoCodes.code));
  if (first) {
    return region;
  }
});

JSFiddle

0 голосов
/ 02 января 2019

Используйте комбинацию .find для итерации по regions и .some, чтобы проверить, прошел ли какой-либо из country s в region тест:

const { code } = this.isoCodes;
const foundRegion = regions.find(({ countries }) => (
  countries.some(({ iso2, iso3 }) => (
    iso2 === code || iso3 === code
  ))
));
if (foundRegion) {
  this.region = foundRegion;
  return foundRegion;
}
return false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...