dご挨拶、おめでとうStackOverflowコミュニティ!私の質問は簡単なものだと思われますが、私が間違っているところではそれを得られません。JSON検索ループは最初のヒット後に停止します
そうなことは、私は、次のデータをJSONを持って、次のとおりです。
var data = [{
"id": 0,
"friends": ["Mike", "John"],
"enemies": ["Albert", "Amy"],
"image": "https://link.com/1"
}, {
"id": 1,
"friends": ["Chad", "John"],
"enemies": ["Lawrence", "Amy"],
"image": "https://link.com/2"
}, {
"id": 2,
"friends": ["Craig", "John"],
"enemies": ["Adam", "Amy"],
"image": "https://link.com/3"
}, {
"id": 3,
"friends": ["Craig", "Bruce"],
"enemies": ["Adam", "Scott"],
"image": "https://link.com/4"
}];
は、今私は、ユーザの入力を使用してこのデータをループしようとしています。たとえば、ユーザーが「Adam」と入力した場合、敵の配列に貧弱なAdamが表示されているオブジェクトのIDを取得したいと考えています。
function getObjectByEnemyName(name){
for (var i = 0; i < data.length; i++) { // In each object of the data array
for (var m = 0; m < data[i].enemies.length; m++) { // Locate the enemies array and search through each of its elements
if (data[i].enemies[m] == name) { // If the m'th element of the enemies array in the i'th object of the data array equals to the entered string
return data[i].id // Return the id value of the data array's i'th object
}
}
}
}
var found = getObjectByEnemyName("Adam");
彼は一度だけenemies
配列に提示されているので、私は、例えば、「アルバート」のために、探していた場合、完全に正常に動作します:
は、これまでのところ私は、次のコードを思い付いています。
しかし、 "Adam"のようなクエリの場合、私の関数はデータ配列の3番目のオブジェクト(id = 2)で最初に正しいヒットを見つけ、出力を続けることを拒否し、2
、実際にそこに次のオブジェクト内の別の「アダム」であり、私は結果がこのような何かになりたいとき:この種の動作を達成するために
['2', '3']
、私は関数の内部よりfor
とwhile
ループを挿入してみました使用していますが、悲惨に失敗しました。私はまた、いくつかのサードパーティのノードパッケージを使ってデータアレイを検索しようとしましたが、成功しませんでした。
私のループには、他のマッチを探し続け、最初の正しいヒットで停止しないように指示する方法がありますか?どんな助けもありがとう。
P .: JSONデータの表示を制御しているので、問題が隠れている場合は簡単に変更できます。ちょっと教えてください。
大変ありがとうございます。 id
に続い
使用を:
を次のようにところで、あなたの検索を簡素化することができます'Array.prototype.filter()' – Redu
あなたの究極の問題は、一度マッチするとあなたが戻ってくることです。代わりに見つけた値を保存するか、上記の 'filter'のようなものを使う必要があります。 – Iluvatar
@Iluvatar @Reduあなたのアドバイスありがとうございました!今のところ値を保存するのをやめようと思っています。なぜなら、それは私の方が使い慣れているからですが、正しく使用する方法を学ぶ際には、必ず 'filter'メソッドを使うことを検討します。 – Monochrome