2012-09-13 13 views
0

我将JavaScript对象数组,但结果我得到一个nullJavaScript代码的问题:我将对象数组

这里我的代码

<div id="a"></div> 

Object.prototype.toArray = function(){ 
    var arr = []; 
    for (var i in this) { 
     arr.push(this[i]);   
    } 
    return arr; 
} 

var providers = { 
      facebooklike: "Facebook Like", 
      facebookrecommend : "Facebook Recommend", 
      facebooksend : "Facebook Send", 
      twittertweet : "Twitter Tweet", 
      linkedinshare : "LinkedIn Share", 
      linkedinrecommend : "LinkedIn Recommend", 
      googleplusplusone : "Google+ +1", 
      googleplusshare : "Google+ Share" 
     }; 

var a = document.getElementById("a"); 
a.innerHTML = JSON.stringify(providers.toArray()); 

我的结果是

[“Facebook Like”,“Facebook推荐”,“Facebook发送”,“推特 Tweet”,“LinkedIn分享”,“LinkedIn推荐”,“Google+ +1”,“Google+ 分享”,空]

这里是小提琴example

回答

3

添加hasOwnProperty检查。对于自己的属性

for (var i in this) { 
    if (this.hasOwnProperty(i)) { 
     arr.push(this[i]); 
    }   
} 
+0

伟大的!谢谢:) –

+0

你能告诉我为什么它在循环中获得额外的属性吗 –

+1

@GovindKamalaPrakashMalviya你应该知道null来自关键'toArray',并且结果数组中的最后一个元素是一个函数,它导致null何时'JSON.stringify' :) – xdazz

4

添加检查(而不是从对象proptotype继承):

Object.prototype.toArray = function(){ 
    var arr = []; 
    for (var i in this) { 
     if(this.hasOwnProperty(i)) 
      arr.push(this[i]);   
    } 
    return arr; 
} 
+0

+1为完整代码。谢谢 :) –