2012-08-27 232 views
0

數組我有以下陣列創建陣列

var a = ["Banana/hgd/kjjkds", "Orange/kldj/kdl", 
     "Apple/jlds/ldks", "Mango/dsfj/dskj"] 

現在我想下面重新創建它,使輸出

{ 
    "a1" : "Banana", 
    "a2" : "hgd", 
    "a3" : "kjjkds" 
} 
{ 
    "a1" : "Orange", 
    "a2" : "kldj", 
    "a3" : "kdl" 
} 
{ 
    "a1" : "Apple", 
    "a2" : "jlds", 
    "a3" : "ldks" 
} 
{ 
    "a1" : "Mango", 
    "a2" : "dsfj", 
    "a3" : "dskj" 
} 

我嘗試以下方法,但沒有任何成功:

var b = []; 
for (var i = 0; i< a.length; i++) { 
    b['a1'] = a[i].split("/")[0]; 
    b['a2'] = a[i].split("/")[1]; 
    b['a3'] = a[i].split("/")[2]; 
    console.log(b); 
    b.push(b); 
} 

console打印所有陣列創建,但array b僅s顯示最後一個。我怎樣才能使它工作?請幫忙。

+6

你「下面」是對象表示法而不是數組。 – PeeHaa

+0

如果你的代碼中有'b.push(b);'聲明,那麼你應該已經知道某些事情是不正確的。您正在將數組添加到它自己... –

回答

5

試試這個:

var spl, b = []; 
for (var i = 0, len = a.length; i < len; i++) { 

    spl = a[i].split("/"); /* execute split() just once */ 

    b[i] = { 
     'a1': spl[0], 
     'a2': spl[1], 
     'a3': spl[2] 
    } 
} 
console.log(b); 
0

您在陣列推到自身。這應該引發警告信號。

相反,您需要一個輸出數組和一個臨時數組來添加鍵。

var b = [], t, s, l = a.length, i; 
for(i=0; i<l; i++) { 
    s = a[i].split("/"); 
    t = { 
     "a1":s[0], 
     "a2":s[1], 
     "a3":s[2] 
    } 
    b.push(t); 
} 

我也在那裏添加了一些優化。