我有一个区域对象数组,每个对象都包含一个国家/地区数组。我要在一个国家的ISO代码与预先填充的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;
}
答案 0 :(得分:2)
结合使用.find
和regions
遍历.some
和country
来查看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;
中的任何一个是否通过测试:
$xarray = array($x => "space" . $x);
echo "<p id=$xarrray[$x]></p>";
答案 1 :(得分:0)
// 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;
}
});
答案 2 :(得分:-1)
您可以从js库lodash中使用_.find():
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; });