ネイティブの使用Array.filter
最新のブラウザー (IE9+ またはその他の主要なブラウザーの最近のバージョンfilter
) のみをターゲットにしている場合は、JavaScript 1.6 配列メソッド を使用できます。
var testItem,
data = [{"id":"item-1","href":"google.com","icon":"google.com"},
{"id":"item-2","href":"youtube.com","icon":"youtube.com"},
{"id":"item-3","href":"google.com","icon":"google.com"},
{"id":"item-4","href":"google.com","icon":"google.com"},
{"id":"item-5","href":"youtube.com","icon":"youtube.com"},
{"id":"item-6","href":"asos.com","icon":"asos.com"},
{"id":"item-7","href":"google.com","icon":"google.com"},
{"id":"item-8","href":"mcdonalds.com","icon":"mcdonalds.com"}];
function getItemById(data, id) {
// filter array down to only the item that has the id
// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter
var ret = data.filter(function (item) {
return item.id === id;
});
// Return the first item from the filtered array
// returns undefined if item was not found
return ret[0];
}
testItem = getItemById(data, 'item-3');
実施例
データを手動でループする
フィルターを使用できない場合は、おそらくループを使用するだけで立ち往生しています。
var testItem,
data = [{"id":"item-1","href":"google.com","icon":"google.com"},
{"id":"item-2","href":"youtube.com","icon":"youtube.com"},
{"id":"item-3","href":"google.com","icon":"google.com"},
{"id":"item-4","href":"google.com","icon":"google.com"},
{"id":"item-5","href":"youtube.com","icon":"youtube.com"},
{"id":"item-6","href":"asos.com","icon":"asos.com"},
{"id":"item-7","href":"google.com","icon":"google.com"},
{"id":"item-8","href":"mcdonalds.com","icon":"mcdonalds.com"}];
function getItemById(data, id) {
var i, len;
for (i = 0, len = data.length; i < len; i += 1) {
if(id === data[i].id) {
return data[i];
}
}
return undefined;
}
testItem = getItemById(data, 'item-3');
実施例
ループでブルート フォーシングするのは を使用するよりも洗練されていないように見えるかもしれませんがArray.filter
、ほとんどの場合、ループは よりも高速でArray.filter
あることがわかります。
配列ではなくオブジェクトへのリファクタリング
各アイテムが一意であると仮定すると、最善の解決策はid
、データの保存方法をリファクタリングすることです。オブジェクトの配列の代わりに、 をキーとして使用するオブジェクトを使用して、およびキー/プロパティ値id
を含むオブジェクトを格納します。href
icon
var data = {
"item-1": {"href": "google.com", "icon": "google.com"},
"item-2": {"href": "youtube.com", "icon": "youtube.com"},
"item-3": {"href": "google.com", "icon": "google.com"},
"item-4": {"href": "google.com", "icon": "google.com"},
"item-5": {"href": "youtube.com", "icon": "youtube.com"},
"item-6": {"href": "asos.com", "icon": "asos.com"},
"item-7": {"href": "google.com", "icon": "google.com"},
"item-8": {"href": "mcdonalds.com", "icon": "mcdonalds.com"}
};
これにより、アイテムへのアクセスがさらに簡単かつ高速になります。
var data = JSON.parse(localStorage.getItem("result"));
data["item-3"].href;