【问题标题】:javascript Iterate Object Arrayjavascript 迭代对象数组
【发布时间】:2017-03-29 11:27:42
【问题描述】:

首先,我是 js 的新学生,而不是母语英语,我为我的问题做了一些研究,我找到了,但严重的是我仍然无法理解,这里最接近 myproblem 的案例,事实上我只是意识到我真的很愚蠢。我不敢相信自己我还不能理解,这是我的问题,我希望在这之后我能理解。

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

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

【问题讨论】:

    标签: javascript arrays json object iterator


    【解决方案1】:

    for(key in object) 用于对象。你有一个数组

    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);
    }
    

    【讨论】:

    • 我认为这是最简单的方法
    • 感谢您的回答,即使这不是我要找的那个,我需要一些迭代,但我仍然可以从中学到一些东西,谢谢
    • 你有另一种形式,也许适合你的迭代需求。
    【解决方案2】:

    这可能会对你有所帮助。

    不要在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);

    【讨论】:

    • 非常感谢您的回答,即使我仍然无法完全理解它,但我会尝试......真的非常感谢
    【解决方案3】:

    您需要迭代两次,首先是存储对象的数组,然后是对象的属性:

    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
    

    【讨论】:

      【解决方案4】:

      使用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);

      【讨论】:

        【解决方案5】:

        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]]);
        }
          

        【讨论】:

          猜你喜欢
          • 2019-02-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-29
          • 1970-01-01
          • 1970-01-01
          • 2021-06-22
          • 1970-01-01
          相关资源
          最近更新 更多