2017-08-07 8 views
1

キーワードでJSONを検索しようとしています。私は、以下のコードでは "タグ"であるIDによって正常に検索しました。しかし、私がしたいことは、 "タグ"のID内ではなく "減価償却"のキーワードで検索することです。 JSONの括弧で囲まれた「depreciated」と指定されているものだけが選択されます。それから、私のコードのように、タイトルとURIが引き出され、文書に書き込まれます。キーワードでjQueryを使用してJSONを検索する

現在のコードでキーワード検索を実行するにはどうすればよいですか?私の論理を理解することが難しい場合は、コメントに私に教えてください。ありがとうございます。

注:これはまさにデータが使用されるJSON形式です。

<script type='text/javascript'> 
    window.onload=function(){ 
    var data = { 
     "Feed": [ 
      { 
       "categories":[ 
       "Depreciated", 
       "Test" 
       ], 
       "content":"", 
       "tags":[ 
       "Depreciated", 
       "Test" 
       ], 
       "title":"Visual Design", 
       "uri":"google.com" 
      }, 
      { 
       "categories":[ 
       "Depreciated" 
       ], 
       "content":"", 
       "tags":[ 
       "Depreciated" 
       ], 
       "title":"Typography", 
       "uri":"google.com" 
      } 
     ] 
     }, 
     res = JSON.search(data, '//*[tags]'); 

    for (var i=0, str=''; i<res.length; i++) { 
     str += '<a href="' + res[i].uri + '">Link</a>' + res[i].title + '<br/>'; 
    } 

    document.getElementById('output').innerHTML = str; 
    } 
</script> 
+0

誰かがあなたの質問をダウン投票理由、それは素晴らしい質問だわかりません。 – Difster

+0

ありがとうございます!おそらく、私は "プロ"ではないからです:P – rniller

+0

jsonオブジェクトを繰り返し処理し、必要なものをテストできます。 https://stackoverflow.com/questions/684672/how-do-i-loop-through-or-enumerate-a-javascript-object – Difster

答えて

1

このためにjQueryを使用する必要はありません:

は、ここに私のコードです。 Try something like this instead

function getTitlesByTag(arr, tag) { 
    return arr.filter(function(item) { 
    return item.tags.includes(tag) 
    }).map(function(item) { 
    return { 
     title: item.title, 
     uri: item.uri 
    } 
    }) 
} 
+0

shadymoses、コードwalk-thruとexampleに感謝します。これは役に立ちます!あなたのコードとWillの方法を理解しようとすると、JSONをより分かりやすい配列に分解してから、アクセスする関数に配置されますか? – rniller

+0

はい。あなたが探している関連データは配列なので、その構造に常に頼ることができれば、それを直接指すことができます。配列の操作は非常に便利です。コードを抽象化する必要がない場合は、別個の機能を持つ必要はありません。 – shadymoses

1

shadeymoses私よりも速かったが、基本的に、あなた:あなたはそれを心配している場合はそうは以下のようにそれはindexOfのためにチェックアウト入れ替えることができるように

function getTitlesByTag(arr, tag) { 
    return arr.filter(function(item) { 
    return item.tags.includes(tag) 
    }).map(function(item) { 
    return return { 
     title: item.title, 
     uri: item.uri 
    } 
    }) 
} 

Array.prototype.includesは、何のIEをサポートしていませんfilter()map()が必要です。

var data = { 
 
    "Feed": [{ 
 
     "categories": [ 
 
     "Depreciated", 
 
     "Test" 
 
     ], 
 
     "content": "", 
 
     "tags": [ 
 
     "Depreciated", 
 
     "Test" 
 
     ], 
 
     "title": "Visual Design", 
 
     "uri": "google.com" 
 
    }, 
 
    { 
 
     "categories": [ 
 
     "Depreciated" 
 
     ], 
 
     "content": "", 
 
     "tags": [ 
 
     "Depreciated" 
 
     ], 
 
     "title": "Typography", 
 
     "uri": "google.com" 
 
    } 
 
    ] 
 
}; 
 

 
let results = data.Feed.filter(el => el.tags.includes('Depreciated')).map(el => ({ 
 
    uri: el.uri, 
 
    title: el.title 
 
})); 
 

 
console.log(results);

+0

ありがとうございます!これも非常に便利です。フィルタは理にかなっています。ちょうど私が理解するように、フィルタはデータを変数のチャックに分割しますか? – rniller

+1

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter配列全体を反復処理し、通常はより小さな配列( )を返します。 – Will

+0

nullが返されたとしたらどう思いますか? – rniller

関連する問題