2017-01-26 200 views
2

所有,我试图将对象推入一个数组,并console.logging新数组,看看它看起来像,它看起来好像它不能正常工作。你能告诉我我做错了吗?将对象推入数组

<% var testObjArray = [] %>  
<% var testObj = {} %> 

<% currentUser.shares.forEach(function(share){ %> 
    <% if(!share || share.length < 1){ %> 
    <!--DO NOTHING--> 
    <% } else { %> 
     <% if(currentUser.id == share.yes_owner.id){ %> 
      <% testObj.price = share.event.yes_purchase_price %> 
      <% testObj.yes_or_no = "YES" %> 

     <% } else { %> 

      <% testObj.price = share.event.no_purchase_price %> 
      <% testObj.yes_or_no = "No" %> 
     <% }%> 
      <% testObj.quantity = 1 %> 
      <% testObj.eventId = share.event.id %> 
      <% testObj.name = share.event.name %> 

     <% testObjArray.push(testObj) %> 
     <% console.log(testObj) %> 
    <% }%> 
<% }) %> 
<% console.log("THIS IS THE NEW OBJARRAY: " + testObjArray) %> 

我想最终的结果是,并期待它是..

[{ price: undefined, 
    yes_or_no: 'No', 
    quantity: 1, 
    eventId: 588a107edf666e0273614cca, 
    name: 'Will this work?' }, 
{...}, 
{...}, 
{ price: undefined, 
    yes_or_no: 'No', 
    quantity: 1, 
    eventId: 588a107edf666e0273614cca, 
    name: 'Will this work?' } 
...] 

然而,事实证明像...

“这是新的OBJARRAY:” [对象的对象],[对象的对象],[对象的对象],[对象的对象]

+1

你(也)在你的代码中有一个致命的缺陷,那就是你将在每次迭代中覆盖testObj,这意味着你的数组最终会以同一个对象(* last * 1)多次结束,而不是每个插槽中都有一个新的对象 - 您需要将'var testObj = {}'**放在forEach循环** –

+1

之内,这是什么<% %>永远在线?你不能把<%放在第一行,%>放在最后? –

+0

我想是这样..我不知道。谢谢! – FDRH

回答

3

更改此

console.log("THIS IS THE NEW OBJARRAY: " + testObjArray) 

console.log("THIS IS THE NEW OBJARRAY: ", testObjArray) 

因为"string" + Object使得打印成字符串

+0

我知道这是愚蠢的。谢谢! – FDRH

+0

欢迎您:) –

1

您注销对象引用,注销对象键的字符串对象和值,你可以在对象上调用JSON.stringify()

<% console.log("THIS IS THE NEW OBJARRAY: " + JSON.stringify(testObjArray)) %> 
1

您的console.log()对该对象造成隐式调用toString(),因为您将它与一个字符串。

您可以通过n个参数来console.log(),所以改变

console.log("THIS IS THE NEW OBJARRAY: " + testObjArray) 

console.log("THIS IS THE NEW OBJARRAY: ", testObjArray); 

会给你你所期望的输出。