LoginSignup
3
3

More than 5 years have passed since last update.

値が配列になっている連想配列の処理(Javascript)

Last updated at Posted at 2016-10-02
  • 値が配列になっている
  • その配列の要素数はキーごとに異なる

そんな連想配列(オブジェクト)の処理についてのメモ
例えばこんな感じのオブジェクト

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);
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3