2016-12-28 79 views
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的。
+0

你的代碼的工作,你期待一個不同的結果? (https://jsfiddle.net/uw12xxyp/1/) –

+0

我擔心我沒有使用最好的模式 - 或者錯過了一些使它更復雜的東西。 – hawkeye

+0

這樣做的「功能」方法是創建函數'toString'和'concat',並按照相同名稱的參數方法(或正確的中綴運算符),然後執行'.map(toString).reduce( concat)'FWIW,我發現你寫的是更可讀的慣用JS。 –

回答

3

你必須overwrite the default toString method有一個自定義的方法(而不是屬性):

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(", "));

相關問題