- 値が配列になっている
- その配列の要素数はキーごとに異なる
そんな連想配列(オブジェクト)の処理についてのメモ
例えばこんな感じのオブジェクト
var obj = {
key1 : [
"value1-1", "value1-2", "value1-3", "value1-4", "value1-5"
],
key2 : [
"value2-1", "value2-2", "value2-3"
],
key3 : [
"value3-1", "value3-2", "value3-3", "value3-4"
],
key4 : [
"value4-1"
],
key5 : [
"value5-1", "value5-2", "value5-3"
],
}
各キーに対する配列内の要素すべてにループ処理
要は「値となっている文字列すべてに同じ処理をする」場合。
Object.keys
でキー配列を取得し、forEach
でループを回す。forEach
の第二引数に元のオブジェクトを入れると、ループ内でthisとして扱えるので楽。
forEach
が2つ並ぶのが綺麗じゃない気がするけどどうなんだろう。
Object.keys(obj).forEach(function(key) {
this[key].forEach(function(val) {
console.log(val); // -> "value1-1", "value1-2", ... "value5-3"
});
}, obj);
もしくはこう。
Object.keys(obj).forEach(function(key) {
for(val of this[key]) {
console.log(val);
}
}, obj);
特定の文字列が配列内に含まれているか調べる
同じくObject.keys
でキー配列を取得し、forEach
でループを回す。
targetStr
が配列内に存在しない場合indexOf(targetStr) = -1
となるので、0以上の場合に含まれているとみなす。
var targetStr = "value3-3";
Object.keys(obj).forEach(function(key) {
if(this[key].indexOf(targetStr) >= 0) {
console.log(key); // -> key3
}
}, obj);