javascript迭代对象数组

时间:2016-11-15 14:23:58

标签: javascript arrays json object iterator

首先,我是js的新生,而不是母语 - 英语,我为我的问题做了一些研究,我发现了但是认真的我仍然无法理解,这里最接近{ {3}},事实上我只是意识到我真的很蠢。我无法相信自己,我无法理解它,这就是我的问题,我希望在此之后我能理解。

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

但我认为我的问题可能是因为我不完全理解迭代...键或类似的东西,这看起来像数组维?如果你能给我链接或参考我在这个问题上缺乏的东西,那么我可以指出并掌握它。我很抱歉提出这样一个简单的问题,但我真的很困惑。

5 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

这可能会对你有帮助。

不要在for in个对象上使用array循环。检查here

使用map | filter | reduce作用于数组以获取数组中的对象并返回修改后的数组。

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 2 :(得分: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

答案 3 :(得分:0)

使用Array.prototype.map()delete operator

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 4 :(得分: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]]);
}