配列のアイテムを別の配列にコピーする
JavaScriptの配列dataArray
があり、それを新しい配列newArray
に押し込みたいと思っています。ただし、newArray[0]
をdataArray
にしたいわけではありません。すべてのアイテムを新しい配列にプッシュしたいのです。
var newArray = [];
newArray.pushValues(dataArray1);
newArray.pushValues(dataArray2);
// ...
あるいはもっと良い方法があります。
var newArray = new Array (
dataArray1.values(),
dataArray2.values(),
// ... where values() (or something equivalent) would push the individual values into the array, rather than the array itself
);
このように、新しい配列には個々のデータ配列のすべての値が含まれています。 pushValuesのような略記法があれば、個々の
dataArray`を反復してアイテムを1つずつ追加する必要はないのでしょうか?
846
3
concat]1関数を使って、次のようにします。
newArray
の値は
[1, 2, 3, 4]となる(
arrayAと
arrayBは変更されず、
concat` は結果として新しい配列を作成して返す)。配列が巨大でなければ(下記の注意点を参照),値を追加したい配列の
push()
メソッドを使うことができます.push()は複数のパラメータを取ることができるので,その
apply()メソッドを使って,プッシュされる値の配列を関数のパラメータのリストとして渡すことができます。これは,
concat()`を使う場合と比べて,新しい配列を作るのではなく,その場で配列に要素を追加できるという利点があります。しかし,大規模な配列(10万メンバー以上のオーダー)では,このトリックは失敗することがあるようです。このような配列では,ループを使用するのが良い方法です.詳細は https://stackoverflow.com/a/17368101/96100 を参照してください。
これを関数に一般化するといいかもしれません。
... または
Array
のプロトタイプに追加してください。... あるいは、
push()
と同様にconcat()
が複数のパラメータを許可していることを利用して、複数のパラメータを許可することで、オリジナルのpush()
メソッドをエミュレートします。先ほどの例をループベースにしたもので、大きな配列や、IE
これで問題は解決しましたか?