2016-11-15 300 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

感谢另一个选择与正常的循环 –