0

JS 配列プロトタイプに「max」フィールドを追加しました。配列を文字列化するときに、この追加を確認するのに問題があります。toJSON 関数を上書きしようとしましたが、役に立ちませんでした。

Array.prototype.max = 0;
Array.prototype.toJSON = function(){
    var o = this;
    o.max = this.max;
    return o;
};

var a = [1,2,3];
a.max = 10;

console.log(JSON.stringify(a));
//'[1,2,3]'

{array_field:a,max_field:max} のようなことを避けて、単に配列オブジェクトを使用したいのですが、これは可能ですか? 私は何を間違っていますか?

4

1 に答える 1

1

ここにはいくつかのオプションがありますが、どれもあなたが望むものを正確に実行するものではありません.

maxJSON 配列は整数キー [1] に厳密に制限されているため、値を直接送信することはできません。

選択肢は次のとおりです。

  • objectの代わりに を使用しarrayます。配列の魔法はすべて失われますが、その方がうまくいくかもしれません。
  • maxと配列値の両方を含む構成オブジェクトなど、配列外のメタデータを送信します
  • max配列を送信する前に、配列を強制的に長くします。JSON は未使用の配列要素を でエンコードしnullます。
  • カスタムのシリアライザー/デシリアライザーを使用します。JSONS+ エクストラでコーディングすることもできます。実際には、これは 2 番目のオプションとほぼ同じになります。

[1] JavaScript オブジェクトとの違い

于 2014-04-05T20:39:10.863 に答える