2016-11-15 187 views
1

首先我是js的新學生,而不是母語英語,我爲我的問題做了一些研究,但是我發現它,但認真的我仍然無法理解,在這裏最接近的情況對於myproblem,其實我只是意識到我真的很愚蠢。我無法相信自己,我現在還不能理解,這是我的問題,我希望在這之後我能理解。javascript迭代對象數組

var obj = [ 
    {hari:"senin", kehadiran:"masuk" , alasan:""}, 
    {hari:"selasa", kehadiran:"masuk" , alasan:""}, 
    {hari:"rabu", kehadiran:"absen" , alasan:"dinas keluar"}, 

] 
//console.log(obj[1].kehadiran); 

for (var prop in obj) { 
    console.log("hari :" + prop + " = " + obj[prop]); 
} 

我有這樣的對象,只是想改變它是這樣的:

Hari: senin 
Kehadiran: masuk 

Hari: rabu 
Kehadiran: masuk 

Hari: jumat 
Kehadiran: absen 
Alasan: dinas luar 

但我覺得我的問題,也許是因爲我不完全理解迭代的...鍵或類似的東西這和這看起來像數組維?如果你可以給我鏈接或參考從我缺乏這個問題,所以我可以指出並掌握它。我很抱歉問這樣一個簡單的問題,但我真的很困惑。

回答

1

for(鍵入對象)用於對象。你有一個數組

var obj = [ 
    {hari:"senin", kehadiran:"masuk" , alasan:""}, 
    {hari:"selasa", kehadiran:"masuk" , alasan:""}, 
    {hari:"rabu", kehadiran:"absen" , alasan:"dinas keluar"}, 

] 

obj.forEach(function(item){ 
    console.log(item.hari, item.kehadiran); 
}); 

https://jsfiddle.net/5ghkh1L8/

備選:

for(var i = 0; i < obj.length; i++) { 
    console.log(obj[i].hari, obj[i].kehadiran); 
} 
+0

我認爲這是做 – thefailtheory

+0

謝謝您的回答,甚至儘管這不是一個我正在尋找最簡單的方法,我需要的東西有點重複,但我仍然可以從這裏學習一些東西,thaanks –

+0

你有另一種形式,可能適合你的迭代需要。 – yBrodsky

0

這可以幫助你。

請勿在array對象上使用for in循環。檢查它here

使用map | filter | reduce,它們作用於數組以獲取數組中的對象並返回修改後的數組。

var obj = [ 
 
    {hari:"senin", kehadiran:"masuk" , alasan:""}, 
 
    {hari:"selasa", kehadiran:"masuk" , alasan:""}, 
 
    {hari:"rabu", kehadiran:"absen" , alasan:"dinas keluar"}, 
 

 
]; 
 
    
 
var tempObj; 
 
var newObj = obj.map(function(item){ 
 
    tempObj = {}; 
 
    for(var key in item){ 
 
    if(item.hasOwnProperty(key) && item[key]){ 
 
     tempObj[key] = item[key]; 
 
    } 
 
    } 
 
    return tempObj; 
 
}); 
 
console.log(newObj);

+0

非常感謝你的回答,即使我仍然不能完全理解它,但我會盡力......這是真的非常感謝 –

0

您需要在陣列上重複兩次,第一次在對象存儲,然後在對象的屬性:

var obj = [ 
    {hari:"senin", kehadiran:"masuk" , alasan:""}, 
    {hari:"selasa", kehadiran:"masuk" , alasan:""}, 
    {hari:"rabu", kehadiran:"absen" , alasan:"dinas keluar"}, 

    ] 

    //iterating over array 
    for (var key in obj) { 
    var currentObj = obj[key]; 

    //iterating over object's properties 
    for(var prop in currentObj){ 
     console.log("hari :" + prop + " = " + currentObj[prop]); 
    } 
    } 

希望這有助於

這將給出以下輸出:

hari :hari = senin 
    hari :kehadiran = masuk 
    hari :alasan = 
    hari :hari = selasa 
    hari :kehadiran = masuk 
    hari :alasan = 
    hari :hari = rabu 
    hari :kehadiran = absen 
    hari :alasan = dinas keluar 
+0

謝謝,我想我可以理解這一點。 –

0

使用Array.prototype.map()delete operator

var obj = [ 
 
    {hari:"senin", kehadiran:"masuk" , alasan:""}, 
 
    {hari:"selasa", kehadiran:"masuk" , alasan:""}, 
 
    {hari:"rabu", kehadiran:"absen" , alasan:"dinas keluar"}, 
 
]; 
 

 
var newObj = obj.map(function(item){ 
 
    if(item.alasan.trim() === "") 
 
    delete item.alasan; 
 
    return item; 
 
}); 
 
console.log(newObj);

0

var obj = [ 
 
    {hari:"senin", kehadiran:"masuk" , alasan:""}, 
 
    {hari:"selasa", kehadiran:"masuk" , alasan:""}, 
 
    {hari:"rabu", kehadiran:"absen" , alasan:"dinas keluar"} 
 
]; 
 

 
obj.forEach(function(item) { //this is a safe way to loop through our array 
 
    Object.keys(item).forEach(function(key) { 
 
    if (item[key] !== "") console.log(key + ': ' + item[key]); 
 
    }); 
 
});

你也可以堅持你的for循環。

var obj = [ 
 
    {hari:"senin", kehadiran:"masuk" , alasan:""}, 
 
    {hari:"selasa", kehadiran:"masuk" , alasan:""}, 
 
    {hari:"rabu", kehadiran:"absen" , alasan:"dinas keluar"} 
 

 
]; 
 

 
for (var i = 0; i < obj.length; i++) { 
 
    var keys = Object.keys(obj[i]); 
 
    for (var k = 0; k < keys.length; k++) 
 
    if (obj[i][keys[k]] !== "") console.log(keys[k] + ': ' + obj[i][keys[k]]); 
 
} 
 

+0

感謝另一個選擇與正常的循環 –