📝

[].concat(a1(), a2())

2023/04/04に公開
[].concat(a1(), a2())

こういうコードを見て、別に配列リテラルそのまま書けばいいじゃんと思ったんだけど、よく考えたら少し便利かもしれない。

a1a2 が配列を返す場合、配列リテラルだと配列の配列になってしまう。

function a1() {
  return [1, 2, 3];
}
function a2() {
  return [4, 5, 6];
}
console.log([a1(), a2()]); // [[1, 2, 3], [4, 5, 6]]

Array.prototype.concat ならフラットになる。

function a1() {
  return [1, 2, 3];
}
function a2() {
  return [4, 5, 6];
}
console.log([].concat(a1(), a2())); // [1, 2, 3, 4, 5, 6]

これがうれしいことはまあまあありそうなので覚えておいて良いパターンかもしれないが、初見だと「?」となる。

Array.prototype.concat.call(a1(), a2())

みたいなのもありえるのか。いや、長いか。

Discussion