3

私はオブジェクトの配列を持っています。 (ユースケースはソリティアカードかもしれません)。JavaScriptでカスタムtoStringを使用してオブジェクトの配列を作成できますか?

デバッグのためにtoStringを埋め込みたいとします。

私は次のように(簡略化して)それらを作成して配列に入れています。

var shuffledArray = []; 
var myObj = { 
    a: "my val-a1", 
    b: "my val-b1", 
    init: function() { 
    this.toString = this.a + " of " + this.b; 
    return this; 
    } 
}.init(); 

shuffledArray.push(myObj); 

var myObj2 = { 
    a: "my val-a2", 
    b: "my val-b2", 
    init: function() { 
    this.toString = this.a + " of " + this.b; 
    return this; 
    } 
}.init(); 

shuffledArray.push(myObj2); 

mappableToString = function (element) { 
    return element.toString; 
} 

var shuffledArrayToString = shuffledArray.map(mappableToString); 

console.log("shuffled array: " + shuffledArrayToString.join(", ")); 

地図の手順に間違っているような気がします。 toStringメソッドではjoinだけできませんか?

仮定

  • 私は生のJavascriptを使用することを目指すが、アンダースコアやjQueryのために開いていますよ。あなたは、カスタムメソッド(とないプロパティ)でoverwrite the default toString methodに持って
+0

あなたのコードが動作するには、あなたは異なる結果を期待していますか? (https://jsfiddle.net/uw12xxyp/1/) –

+0

私は最良のパターンを使用していないか、もっと複雑なものを見逃してしまったのではないかと心配しています。 – hawkeye

+0

これを行うための「機能的な」方法は、同じ名前(または適切な中置演算子)の引数のメソッドを継承する関数 'toString'と' concat'を作成し、 '.map(toString).reduce FWIW、私はあなたが読みやすい慣用句JSと書いたものを見つけます。 –

答えて

3

function MyObject(x) { 
 
    this.x = x; 
 
} 
 
MyObject.prototype.toString = function() { 
 
    return "MyObject: " + this.x; 
 
} 
 

 

 
var arr = []; 
 
for (var i = 0; i < 10; i++) { 
 
    arr.push(new MyObject(i)); 
 
} 
 

 
console.log(arr.join(", "));

関連する問題