1. ホーム
  2. javascript

[解決済み] Javascript - 配列の各文字列にトリム関数を適用する

2023-03-12 05:56:50

質問

配列の各文字列をトリミングしたい。

x = [' aa ', ' bb '];

出力

['aa', 'bb']

私の最初の試みは

x.map(String.prototype.trim.apply)

TypeErrorが発生しました。Function.prototype.apply was called on undefined, which is a undefined and not a function" in chromium.と表示されました。

次に、私は試しました。

x.map(function(s) { return String.prototype.trim.apply(s); });

効くんです。何が違うの?

どのように解決するのですか?

String.prototype.trim.apply Function.prototype.apply メソッド に束縛されることなく trim . map は、文字列、インデックス、配列を引数として起動し、何も( undefined ) を指定します。 this Arg - が、しかし apply は関数で呼ばれることを期待します。

var apply = String.prototype.trim.apply;
apply.call(undefined, x[0], 0, x) // TypeError

できることは trim 関数のコンテキストとして call :

[' aa ', ' bb '].map(Function.prototype.call, String.prototype.trim)
// ['aa', 'bb']

ここで起こることは

var call = Function.prototype.call,
    trim = String.prototype.trim;
call.call(trim, x[0], 0, x) ≡
      trim.call(x[0], 0, x) ≡
            x[0].trim(0, x); // the arguments don't matter to trim