こちらに来ました????????
frtneさんの意図を理解、致しました。
jsonデータ数とp数が違った場合、例えば、
json配列のデータ数 * p要素数
10 * 2
の際、forループを使って全部回すのかどうか。
別案として、以下のコードの様に、先にjson配列からid===0
のオブジェクトだけ取り出す(filter()
)する方法があります。
ただ、forループも使い全回しするか先にフィルターするか、どちらが最適なアルゴリズムかは、今の僕のレベルでは力量不足で明確に分かりません…すみません(´๑›ω‹๑)????
json配列内のデータ数とid === 0
の数による…というのまでは、表(以下)にしてみて分かりました????
宜しければ参考までに使ってやって下さい???????? もしかしたら、他にもっといい方法が、あるかもしれません(他の回答者様宜しくお願い致します????????)
js
1"use strict";
2
3let filtered = hoge.filter(function (obj) {
4 return obj.id === 0;
5});
6
7
8$(".text").each(function (index) {
9 let text = $(this).text(),
10 _this = $(this);
11
12 filtered.map(function (person) {
13 if (person.name === text) {
14 _this.hide();
15 }
16 });
17});
追記
もう少しスリムにまとめてみました。結果は同じです。
ES6の矢印関数(アロー関数)で書くと、よりスリムになります。
"use strict";
let hasId0 = function hasId0(obj) {
return obj.id === 0;
};
$(".text").each(function (indx, elm){
let txt = $(elm).text();
hoge
.filter(hasId0)
.map(function (person){ /* arrayOf_hogeFiltered.map() */
return person.name === txt ? elm : false; // ---(1)
})
.forEach(function (el){ /* arrayOf_DOMElementsMatchedPrev.forEach() ---(2) */
return $(el).hide();
});
});
/*
---(1)
以下と同じ意味。
if( person.name === txt ){
return elm;
}
*/
id===0 | hoge.filter() + $.each() * filtered.map() | | $.each() + for(){} |
---|
| ループ数 | | ループ数 |
3個の場合 | 3 + (3 * 3) = 12 | > | 9 |
2個 | 3 + (3 * 2) = 9 | === | 9 |
1個 | 3 + (3 * 1) = 6 | < | 9 |
0個 | 3 + (3 * 0) = 3 | < | 9 |