2016-12-28 41 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(", "));

相关问题