ピョートルWalczak:
{
"groups": [
{
"name": "Event",
"groups": [
{
"name": "Service",
"subscriptions": [
{
"topic": "SERVICE_STATUS_PRESETS"
},
{
"topic": "AIRCRAFT_ACTIVATION",
},
{
"topic": "OUT_OF_SERVICE",
}
]
}
]
},
{
"name": "Enquiries",
"groups": [
{
"name": "Service-related",
"subscriptions": [
{
"topic": "PROMO_CODES_REQUESTS",
}
]
}
]
}
],
"subscriptions": [
{
"topic": "BANNERS",
},
{
"topic": "DOCUMENTS",
},
{
"topic": "USER",
}
]
}
OKみんなは私が必要なものなJSON構造を持つことである。この例では、それはなります、配列内のすべてのトピックを返します。
【 "SERVICE_STATUS_PRESETS"、 "AIRCRAFT_ACTIVATION"、 "OUT_OF_SERVICE"、 "PROMO_CODES_REQUESTS"、 "BANNERS"、 "ドキュメント"、 "USER"]
私は最後の3つのレコードを取得しても、私は、このような再帰呼び出しを試してみてください。
getRecursive() {
if (Array.isArray(data)) {
for (let i = 0; i < data.length; i++) {
if (data[i].subscriptions) {
return data[i].subscriptions.map((val: SubscriptionGroupDetails) => val.topic);
} else if (data[i].groups) {
return this.getAllTopics(data[i].groups);
}
}
}
if (data && data.groups) {
return this.getAllTopics(data.groups);
}
return data.subscriptions.map((val: SubscriptionGroupDetails) => val.topic);
}
ニーナショルツ:
あなたは再帰的なアプローチを取り、チェックすることができます
- 引き渡さデータチェック対象でない場合、次に、空の配列で返します
- オブジェクト募集性質を持っている場合は、の値を持つ配列を返します
topic
、 - または値を取得し、機能を持つ再帰呼び出しを行い、その結果と配列を返します。
function getTopics(object) {
if (!object || typeof object !== 'object') return [];
if ('topic' in object) return [object.topic];
return Object.values(object).reduce((r, v) => [...r, ...getTopics(v)], []);
}
var data = { groups: [{ name: "Event", groups: [{ name: "Service", subscriptions: [{ topic: "SERVICE_STATUS_PRESETS" }, { topic: "AIRCRAFT_ACTIVATION" }, { topic: "OUT_OF_SERVICE" }] }] }, { name: "Enquiries", groups: [{ name: "Service-related", subscriptions: [{ topic: "PROMO_CODES_REQUESTS" }] }] }], subscriptions: [{ topic: "BANNERS" }, { topic: "DOCUMENTS" }, { topic: "USER" }] },
result = getTopics(data);
console.log(result);