我有一个嵌套的 JSON,并且我正在从 API 获取“变体”结果。我正在尝试获取此变体的父名称。
这是 json:
{
"active": true,
"main": [{
"name": "groupOne",
"heights": [{
"name": "sm",
"active": true,
"addSelectedProduct": false,
"colors": [{
"name": "gold",
"triggers": {
"offerIds": ["11111"], "variants": ["11112"]
}
},
{
"name": "blue",
"triggers": {
"offerIds": ["11113"], "variants": ["11114"]
}
},
{
"name": "white",
"triggers": {
"offerIds": ["11115"], "variants": ["11116"]
}
},
{
"name": "black",
"triggers": {
"offerIds": ["11117"], "variants": ["11118"]
}
}
]
},
{
"name": "md",
"active": true,
"addSelectedProduct": false,
"colors": [{
"name": "gold",
"triggers": {
"offerIds": ["11119"], "variants": ["11121"]
}
},
{
"name": "blue",
"triggers": {
"offerIds": ["11122"], "variants": ["11123"]
}
},
{
"name": "white",
"triggers": {
"offerIds": ["11124"], "variants": ["11125"]
}
},
{
"name": "black",
"triggers": {
"offerIds": ["11126"], "variants": ["11127"]
}
}
]
},
{
"name": "lg",
"active": true,
"addSelectedProduct": false,
"colors": [{
"name": "gold",
"triggers": {
"offerIds": ["11128"], "variants": ["11129"]
}
},
{
"name": "blue",
"triggers": {
"offerIds": ["11131"], "variants": ["11132"]
}
},
{
"name": "white",
"triggers": {
"offerIds": ["11133"], "variants": ["11134"]
}
},
{
"name": "black",
"triggers": {
"offerIds": ["11135"], "variants": ["11136"]
}
}
]
}]
},
{
"name": "groupTwo",
"heights": [{
"name": "sm",
"active": true,
"addSelectedProduct": false,
"colors": [{
"name": "gold",
"triggers": {
"offerIds": ["11137"], "variants": ["11138"]
}
},
{
"name": "blue",
"triggers": {
"offerIds": ["11139"], "variants": ["11141"]
}
},
{
"name": "white",
"triggers": {
"offerIds": ["11142"], "variants": ["11143"]
}
},
{
"name": "black",
"triggers": {
"offerIds": ["11144"], "variants": ["11145"]
}
}
]
},
{
"name": "md",
"active": true,
"addSelectedProduct": false,
"colors": [{
"name": "gold",
"triggers": {
"offerIds": ["11146"], "variants": ["11147"]
}
},
{
"name": "blue",
"triggers": {
"offerIds": ["11148"], "variants": ["11149"]
}
},
{
"name": "white",
"triggers": {
"offerIds": ["11151"], "variants": ["11152"]
}
},
{
"name": "black",
"triggers": {
"offerIds": ["11153"], "variants": ["11154"]
}
}
]
},
{
"name": "lg",
"active": true,
"addSelectedProduct": false,
"colors": [{
"name": "gold",
"triggers": {
"offerIds": ["11155"], "variants": ["11156"]
}
},
{
"name": "blue",
"triggers": {
"offerIds": ["11157"], "variants": ["11158"]
}
},
{
"name": "white",
"triggers": {
"offerIds": ["11159"], "variants": ["11159"]
}
},
{
"name": "black",
"triggers": {
"offerIds": ["11161"], "variants": ["11162"]
}
}
]
}]
}]
}
我尝试了很多方法,例如filter,indexOf,但没有成功。我可以使用这样的嵌套 foreach 函数达到最后一步:
var elMain, elHeights, elColor, elOffer;
function findProduct(item){
app.main.forEach(function(el){
el.heights.forEach(function(itemHeights){
itemHeights.colors.forEach(function(itemColor){
if(itemColor.triggers.variants.indexOf(item.toString())){
elOffer = itemColor.triggers.offerIds
elColor = itemColor;
elHeights = itemHeights;
elMain = el;
} else{
}
})
})
})
}
findProduct(11123)
console.log(elMain);
console.log(elHeights);
console.log(elColor);
console.log(elOffer);
但我无法得到正确的结果。我需要直接获取所选变体的父级名称。有没有办法呢?任何帮助都会很棒。
您不应该使用
forEach
,因为当您找到匹配项时,它不会让您轻易摆脱它。最好使用for (key in obj)
。
forEach
var app = {
"active": true,
"main": [{
"name": "groupOne",
"heights": [{
"name": "sm",
"active": true,
"addSelectedProduct": false,
"colors": [{
"name": "gold",
"triggers": {
"offerIds": ["11111"],
"variants": ["11112"]
}
},
{
"name": "blue",
"triggers": {
"offerIds": ["11113"],
"variants": ["11114"]
}
},
{
"name": "white",
"triggers": {
"offerIds": ["11115"],
"variants": ["11116"]
}
},
{
"name": "black",
"triggers": {
"offerIds": ["11117"],
"variants": ["11118"]
}
}
]
},
{
"name": "md",
"active": true,
"addSelectedProduct": false,
"colors": [{
"name": "gold",
"triggers": {
"offerIds": ["11119"],
"variants": ["11121"]
}
},
{
"name": "blue",
"triggers": {
"offerIds": ["11122"],
"variants": ["11123"]
}
},
{
"name": "white",
"triggers": {
"offerIds": ["11124"],
"variants": ["11125"]
}
},
{
"name": "black",
"triggers": {
"offerIds": ["11126"],
"variants": ["11127"]
}
}
]
},
{
"name": "lg",
"active": true,
"addSelectedProduct": false,
"colors": [{
"name": "gold",
"triggers": {
"offerIds": ["11128"],
"variants": ["11129"]
}
},
{
"name": "blue",
"triggers": {
"offerIds": ["11131"],
"variants": ["11132"]
}
},
{
"name": "white",
"triggers": {
"offerIds": ["11133"],
"variants": ["11134"]
}
},
{
"name": "black",
"triggers": {
"offerIds": ["11135"],
"variants": ["11136"]
}
}
]
}
]
},
{
"name": "groupTwo",
"heights": [{
"name": "sm",
"active": true,
"addSelectedProduct": false,
"colors": [{
"name": "gold",
"triggers": {
"offerIds": ["11137"],
"variants": ["11138"]
}
},
{
"name": "blue",
"triggers": {
"offerIds": ["11139"],
"variants": ["11141"]
}
},
{
"name": "white",
"triggers": {
"offerIds": ["11142"],
"variants": ["11143"]
}
},
{
"name": "black",
"triggers": {
"offerIds": ["11144"],
"variants": ["11145"]
}
}
]
},
{
"name": "md",
"active": true,
"addSelectedProduct": false,
"colors": [{
"name": "gold",
"triggers": {
"offerIds": ["11146"],
"variants": ["11147"]
}
},
{
"name": "blue",
"triggers": {
"offerIds": ["11148"],
"variants": ["11149"]
}
},
{
"name": "white",
"triggers": {
"offerIds": ["11151"],
"variants": ["11152"]
}
},
{
"name": "black",
"triggers": {
"offerIds": ["11153"],
"variants": ["11154"]
}
}
]
},
{
"name": "lg",
"active": true,
"addSelectedProduct": false,
"colors": [{
"name": "gold",
"triggers": {
"offerIds": ["11155"],
"variants": ["11156"]
}
},
{
"name": "blue",
"triggers": {
"offerIds": ["11157"],
"variants": ["11158"]
}
},
{
"name": "white",
"triggers": {
"offerIds": ["11159"],
"variants": ["11159"]
}
},
{
"name": "black",
"triggers": {
"offerIds": ["11161"],
"variants": ["11162"]
}
}
]
}
]
}
]
}
var elMain, elHeights, elColor, elOffer;
function findProduct(item) {
found = false
app.main.forEach(function(el) {
if (found) return;
elMain = el.name
el.heights.forEach(function(itemHeights) {
if (found) return;
elHeights = itemHeights.name
itemHeights.colors.forEach(function(itemColor) {
if (found) return;
elColor = itemColor.name
if (itemColor.triggers.variants.indexOf("" + item) >= 0) {
elOffer = itemColor.triggers.offerIds
found = true
}
})
})
})
}
findProduct(11123)
console.log(elMain);
console.log(elHeights);
console.log(elColor);
console.log(elOffer);
.as-console-wrapper {
min-height: 100%;
}
for in
var app = {
"active": true,
"main": [{
"name": "groupOne",
"heights": [{
"name": "sm",
"active": true,
"addSelectedProduct": false,
"colors": [{
"name": "gold",
"triggers": {
"offerIds": ["11111"],
"variants": ["11112"]
}
},
{
"name": "blue",
"triggers": {
"offerIds": ["11113"],
"variants": ["11114"]
}
},
{
"name": "white",
"triggers": {
"offerIds": ["11115"],
"variants": ["11116"]
}
},
{
"name": "black",
"triggers": {
"offerIds": ["11117"],
"variants": ["11118"]
}
}
]
},
{
"name": "md",
"active": true,
"addSelectedProduct": false,
"colors": [{
"name": "gold",
"triggers": {
"offerIds": ["11119"],
"variants": ["11121"]
}
},
{
"name": "blue",
"triggers": {
"offerIds": ["11122"],
"variants": ["11123"]
}
},
{
"name": "white",
"triggers": {
"offerIds": ["11124"],
"variants": ["11125"]
}
},
{
"name": "black",
"triggers": {
"offerIds": ["11126"],
"variants": ["11127"]
}
}
]
},
{
"name": "lg",
"active": true,
"addSelectedProduct": false,
"colors": [{
"name": "gold",
"triggers": {
"offerIds": ["11128"],
"variants": ["11129"]
}
},
{
"name": "blue",
"triggers": {
"offerIds": ["11131"],
"variants": ["11132"]
}
},
{
"name": "white",
"triggers": {
"offerIds": ["11133"],
"variants": ["11134"]
}
},
{
"name": "black",
"triggers": {
"offerIds": ["11135"],
"variants": ["11136"]
}
}
]
}
]
},
{
"name": "groupTwo",
"heights": [{
"name": "sm",
"active": true,
"addSelectedProduct": false,
"colors": [{
"name": "gold",
"triggers": {
"offerIds": ["11137"],
"variants": ["11138"]
}
},
{
"name": "blue",
"triggers": {
"offerIds": ["11139"],
"variants": ["11141"]
}
},
{
"name": "white",
"triggers": {
"offerIds": ["11142"],
"variants": ["11143"]
}
},
{
"name": "black",
"triggers": {
"offerIds": ["11144"],
"variants": ["11145"]
}
}
]
},
{
"name": "md",
"active": true,
"addSelectedProduct": false,
"colors": [{
"name": "gold",
"triggers": {
"offerIds": ["11146"],
"variants": ["11147"]
}
},
{
"name": "blue",
"triggers": {
"offerIds": ["11148"],
"variants": ["11149"]
}
},
{
"name": "white",
"triggers": {
"offerIds": ["11151"],
"variants": ["11152"]
}
},
{
"name": "black",
"triggers": {
"offerIds": ["11153"],
"variants": ["11154"]
}
}
]
},
{
"name": "lg",
"active": true,
"addSelectedProduct": false,
"colors": [{
"name": "gold",
"triggers": {
"offerIds": ["11155"],
"variants": ["11156"]
}
},
{
"name": "blue",
"triggers": {
"offerIds": ["11157"],
"variants": ["11158"]
}
},
{
"name": "white",
"triggers": {
"offerIds": ["11159"],
"variants": ["11159"]
}
},
{
"name": "black",
"triggers": {
"offerIds": ["11161"],
"variants": ["11162"]
}
}
]
}
]
}
]
}
var elMain, elHeights, elColor, elOffer;
function findProduct(item) {
found = false
for (var i in app.main) {
el = app.main[i]
elMain = el.name
for (var j in el.heights) {
itemHeights = el.heights[j]
elHeights = itemHeights.name
for (var k in itemHeights.colors) {
itemColor = itemHeights.colors[k]
elColor = itemColor.name
if (itemColor.triggers.variants.indexOf("" + item) >= 0) {
elOffer = itemColor.triggers.offerIds
return
}
}
}
}
}
findProduct(11123)
console.log(elMain);
console.log(elHeights);
console.log(elColor);
console.log(elOffer);
.as-console-wrapper {
min-height: 100%;
}