0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Javascriptの連想配列をpushするときに詰まった話

Posted at

ポイント

  1. Array.push(original)は参照になる。
  2. Array.push(Object.assign({}, original))を使おう。

はじめに

次のようなプログラムを作成したときに、正しいnoが得られないトラブルが発生した。

result = [{a: 'a'}, {a: 'b'}, ...];
  for (let i = 0; i < result.length; i++) {
  a.push(result);
  if (適当な条件) {
    b.push(result);
  } else {
    c.push(result);
  }
}

// Aに対する処理
for (let i = 0; i < a.length; i++) {
  // ...
  a[i].no = i;
}

// Bに対する処理
for (let i = 0; i < b.length; i++) {
  // ...
  b[i].no = i;
}

// Cに対する処理
for (let i = 0; i < c.length; i++) {
  // ...
  c[i].no = i;
}

原因

Array.pushは参照になるために、すべてのArrayが同じ連想配列に書き込んだために正しい数値が得られなかった。

対策

Array.push(result);

Array.push(Object.assign({}, result));

PUSH対象の連想配列をObject.assignを使用してコピーしてからpushすることで、元のデータを参照することを避けられる。

0
0
2

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?