1. ホーム
  2. ジャバスクリプト

[解決済み】配列に値を前置する最も効率的な方法

2022-03-28 02:19:54

質問

のサイズを持つ配列があるとします。 N (ここで N > 0 を使用する場合、O(N + 1)ステップを必要としない、より効率的な前置詞の方法はありますか?

コードでは、本質的に、私が現在行っていることは、次のとおりです。

function prependArray(value, oldArray) {
  var newArray = new Array(value);

  for(var i = 0; i < oldArray.length; ++i) {
    newArray.push(oldArray[i]);
  }

  return newArray;
}

解決方法は?

Big-Oの観点でより効率的かどうかは分かりませんが、確実に unshift メソッドはより簡潔です。

var a = [1, 2, 3, 4];
a.unshift(0);
// => [0, 1, 2, 3, 4]
console.log({a});

[編集]をクリックします。

この jsPerfベンチマーク が示すように unshift は、少なくともいくつかのブラウザで、big-O の性能の違いに関係なく、きちんと高速化されています。 もし の場合、配列をインプレースで変更しても問題ありません。 もし本当に元の配列を変更できないのであれば、以下のスニペットのようなことをすることになるでしょう。

a.slice().unshift(0); // Use "slice" to avoid mutating "a".

[編集2]

完全を期すために、OPの例の代わりに次の関数を使用することができます。 prependArray(...) を活用するために、Array unshift(...) メソッドを使用します。

function prepend(value, array) {
  var newArray = array.slice();
  newArray.unshift(value);
  return newArray;
}

var x = [1, 2, 3];
var y = prepend(0, x);
// x => [1, 2, 3];
// y => [0, 1, 2, 3];
console.log({ x, y });