目前,我有以下的数组对象
obj = [
{
"id":28,
cities: [
{
cityTypes: "AA",
citySource: "sdsf"
},
{
cityTypes: "BB",
citySource: "sdsgf"
},
{
cityTypes: "CC",
citySource: "fgsdfgd"
}
]
},
{
"id":56,
cities: [
{
cityTypes: "DD",
citySource: "sdsf"
},
{
cityTypes: "EE",
citySource: "sdsgf"
},
{
cityTypes: "FF",
citySource: "fgsdfgd"
}
]
},
{
"id":89,
cities: [
{
cityTypes: "GG",
citySource: "sdsf"
},
{
cityTypes: "HH",
citySource: "sdsgf"
},
{
cityTypes: "II",
citySource: "fgsdfgd"
}
]
}
]我需要搜索特定值的cityTypes在整个Object中。
假设,我需要搜索cityTypes = BB
如果整个对象中存在BB,则返回true
如果BB未预置,则返回false。
这就是我尝试过的,但似乎行不通。
for(let k=0; k<obj.length; k++){
if(obj[k].cities){
let cityObj = obj[k].cities;
for(let city in cityObj){
city.cityTypes !== "BB" ? "true" : "false"
}
}
}什么是正确的方法来实现这一点?
发布于 2018-09-07 07:07:08
您可以在另一个.some中使用.some
const obj=[{"id":28,cities:[{cityTypes:"AA",citySource:"sdsf"},{cityTypes:"BB",citySource:"sdsgf"},{cityTypes:"CC",citySource:"fgsdfgd"}]},{"id":56,cities:[{cityTypes:"DD",citySource:"sdsf"},{cityTypes:"EE",citySource:"sdsgf"},{cityTypes:"FF",citySource:"fgsdfgd"}]},{"id":89,cities:[{cityTypes:"GG",citySource:"sdsf"},{cityTypes:"HH",citySource:"sdsgf"},{cityTypes:"II",citySource:"fgsdfgd"}]}];
console.log(
obj.some(({ cities }) => cities.some(({ cityTypes }) => cityTypes === 'BB'))
);
console.log(
obj.some(({ cities }) => cities.some(({ cityTypes }) => cityTypes === 'foobar'))
);
发布于 2018-09-07 07:07:20
由于以下几个原因,现有代码无法工作:
let city of cityObj,因为您在内部循环中以city.cityTypes的形式访问city的属性,因此使用of将给出city变量中的每个对象。if条件。如果在您期望的cityTypes中找到匹配,那么break内部循环。如果找到匹配,也可以使用break外部循环。
var obj = [{
"id": 28,
cities: [{
cityTypes: "AA",
citySource: "sdsf"
},
{
cityTypes: "BB",
citySource: "sdsgf"
},
{
cityTypes: "CC",
citySource: "fgsdfgd"
}
]
},
{
"id": 56,
cities: [{
cityTypes: "DD",
citySource: "sdsf"
},
{
cityTypes: "EE",
citySource: "sdsgf"
},
{
cityTypes: "FF",
citySource: "fgsdfgd"
}
]
},
{
"id": 89,
cities: [{
cityTypes: "GG",
citySource: "sdsf"
},
{
cityTypes: "HH",
citySource: "sdsgf"
},
{
cityTypes: "II",
citySource: "fgsdfgd"
}
]
}
]
var found = false;
for (let k = 0; k < obj.length; k++) {
if (obj[k].cities) {
let cityObj = obj[k].cities;
for (let city of cityObj) {
found = city.cityTypes === "BB";
if (found) {
break;
}
}
}
if (found) {
break;
}
}
console.log(found);
发布于 2018-09-07 07:13:48
使用双减缩应该有效
var obj = [{
"id": 28,
cities: [{
cityTypes: "AA",
citySource: "sdsf"
},
{
cityTypes: "BB",
citySource: "sdsgf"
},
{
cityTypes: "CC",
citySource: "fgsdfgd"
}
]
},
{
"id": 56,
cities: [{
cityTypes: "DD",
citySource: "sdsf"
},
{
cityTypes: "EE",
citySource: "sdsgf"
},
{
cityTypes: "FF",
citySource: "fgsdfgd"
}
]
},
{
"id": 89,
cities: [{
cityTypes: "GG",
citySource: "sdsf"
},
{
cityTypes: "HH",
citySource: "sdsgf"
},
{
cityTypes: "II",
citySource: "fgsdfgd"
}
]
}
]
var cityTypes1 = 'BB';
console.log(obj.reduce((total, cur) =>
total||cur.cities.reduce((total, cur) =>
total||cur.cityTypes === cityTypes1, false),
false))
https://stackoverflow.com/questions/52217029
复制相似问题