2016-11-28 73 views
0

一個對象,我必須這樣做:工作過度的字符串,我會問到一些用戶:遍歷在JavaScript

text = ""; 
arr = ["*****"]; 
arr2 = []; 

text = arr.toString(); 
for(i=0; i<text.length; i++) { 
    arr2.push(text[i]); 
} 
    ---> arr2 = [*,*,*,*,*] <--- thats what i want!. 

但我必須有很多像這樣的數據的工作,所以我創建和數組這些內容的結構化數據:

var gems = [ 
    { 
     name: 'Level-1', 
     row: { 
     r1: '*****', 
     r2: '-***-', 
     r3: '--*--' 
     }, 
     canPushtoDb: true, 
     hideLevel: false, 
     status: 1 
     //canvas 
    }, 
    { 
     name: 'Level-2', 
     row: { 
     r1: '**-**', 
     r2: '-*-*-', 
     r3: '-***-', 
     }, 
     canPushtoDb: true, 
     hideLevel: false, 
     status: 1 
     //canvas 
    }, 
    { 
     name: 'Level-3', 
     row: { 
     r1: '*-*-*', 
     r2: '**-**', 
     r3: '*-*-*' 
     }, 
     canPushtoDb: true, 
     hideLevel: true, 
     status: 1 
     //canvas 
    }  

    ]; 

我想內gems循環到字符串轉換在某些類型的數組,就像我在這個問題上的開頭寫道。 我正在看一個Angular示例,它用controller包裝這些對象。

但現在我很遠得到我的代碼在他自己的一些重構版本。我只需要一些硬編碼的函數或方法,如gems.name[0].row.r1(這對我來說並不奏效!)就可以將所有我正在處理的對象拋出。

+3

這將是'寶石[0] .row.r1'不'gems.name [0] .row.r1' –

+0

你應該訪問他們像'寶石[0] .row.r1'。從字符串的字符創建數組:'var arr = str.split('')'; –

+1

你可以用'array.fill'解決你的第一部分問題。 'var arr2 = new Array(tet.length).fill('*')' – Rajesh

回答

2

您可以寶石迭代器來爲這樣的:

for(var i = 0; i < gems.length; i++) { 
... 
} 

然後,您可以通過對象本身環(內你的上面的循環)

$.each(var obj in row) { 
...Do something with each object found in row 
} 

要訪問硬編碼的對象,你的問題是gems.name[0].row.r1

當它應該只是gems[0].row.r1

+0

我想要的是這樣來遍歷行: '爲(I = 0:I <=寶石[2] .row.length;我++){ ARR = 「R1:」 + R1 +「R2 :「+ r2 +」r3:「+ r3; '但是它不起作用。 – Hell0

+1

你必須定義'r1,r2,r3.'你可以通過'var r1 = gems [2] .row.r1' ..等等來完成它們。 – jdmdevdotnet

+0

感謝您的回覆。我這樣做:'for(arr in arr2){ text + ='
'+ arr2 [arr] +'
'; }'。這存在一些問題。首先,輸出顯示一個未定義的單詞,就好像它是'object'上的成員一樣。其次,編輯熱情讓我用'if'語句在'for'裏面說句子。我不能承認兩者。我將變量定義爲:var text; var arr; var arr2 = gems [0] .row;' – Hell0

1

正如@Patrick Evans指出的那樣,除了arr2應該是arr2 = gems[0].row.r1之外,您的代碼是正確的。看看這個JSFiddle

+1

我想這完全一樣的,這是通過@Patrick指出埃文斯在評論部分 – Rajesh