の配列を使用して作業する私は、同じオブジェクトタイプの子を含めることができるオブジェクトの配列を持っている:このようなオブジェクト
var exampleArray = [
{
alias: 'alias1',
children: [
{
alias: 'child1'
},
{
alias: 'child2',
children: [
{
alias: 'child4'
},
{
alias: 'child5'
}
]
},
{
alias: 'child3'
}
]
},
{
alias: 'alias2'
},
{
alias: 'alias3',
children: [
{
alias: 'child6'
},
{
alias: 'child7'
}
]
}
];
ベースオブジェクトは、他のプロパティを持っていますが、彼らは、質問(sまで重要ではありません) 手元に。今のところ、ちょうどオブジェクトが可能と仮定することができます:
{
alias: 'string',
children: []
}
子供はオプションです。
私はこのようなオブジェクトでいくつかのものを管理するための最善の方法/最速の方法を探しています。私は、私が欲しいもののいくつかを行うには、いくつかの再帰的なメソッドを作成しましたが、私は、次の作業を行うことについて移動する良い方法があるかどうかを知りたい:
- hasAlias(ARR、別名は) - 私が判断する必要がありますオブジェクト全体に、エイリアスを持つオブジェクトが含まれている場合
現在、私はこれを再帰的に行いますが、この配列が有限に大きくなる可能性があることを考えると、再帰的メソッドは最終的にスタック制限を打ちます。
getParent(arr、alias) - 指定されたエイリアスを持つ要素を含む親を取得できる必要があります。エイリアスが配列全体にユニークであるとすれば、同じエイリアスは2つありません。繰り返しますが、私はこれを再帰的に行いますが、これを行うためのより良い方法を探したいと思います。
deleteObject(arr、alias) - 私は現在この方法を達成する方法がわかりません。配列とエイリアスを渡して、そのオブジェクト(とそのすべての子)を指定の配列から削除する必要があります。私はこれを行う再帰的な方法を開始したが、代わりにここに投稿することをやめた。
私はNode.jsを使用しており、より高速な方法で利用できるようになっています。私はまだかなりJavaScriptに新しいので、このような大規模な配列を使ってやる方が良いかどうかはわかりません。
I配列全体を2つまたは3つに分割し、現在のメソッドを別々に呼び出すことができると考えてください。この方法で、あなたは特定のものを通過することができます。あなたは良い改善をするでしょう。 –
私はこのようにしているのかどうかは分かりませんが、 'hasAlias' *という単語は、' alias'という単語がなければ 'JSON.stringify(arr).indexOf( 'alias')'他の場所に表示されます。 – adeneo
再帰的に意味があると思います。何千もの入れ子になっている子供がいない限り、スタック制限に達する可能性は低いです。あなたはそれを尾を再帰的にしてトランポリンにするか、またはそれをループに変換するためにトランスポーラーを走らせることができます。 – elclanrs