【问题标题】:jQuery each loop 3-Dimensional Object ArrayjQuery 每个循环 3 维对象数组
【发布时间】:2016-10-24 16:37:45
【问题描述】:

我有一个要循环的多维数组。我希望循环最终查看第一个对象(在示例代码中为:"pressure"),然后对第一个对象内的每个对象执行特定操作。

但我什至无法让它正常工作。我知道我的$.each 函数完全错误 — 我只是不知道如何使它正确。当然,我在控制台中什么也得不到。

$(document).ready(function() {
  var units = {
    "pressure": [
      {
        short: "atm",
        val: "1",
        long: "Atmosphere (standard)"
      }, {
        short: "bar",
        val: "1.01325027383089",
        long: "Bar"
      }, {
        short: "cmHg",
        val: "76.0000526890144",
        long: "Centimeter of Mercury (0℃)"
      }, {
        short: "cmH2O",
        val: "1033.25183423631",
        long: "Centimeter of Water (4℃)"
      }, {
        short: "ft-H2O",
        val: "33.899503811341",
        long: "Foot of Water (4℃)"
      }, {
        short: "GPa",
        val: "0.00010132502738",
        long: "Gigapascal"
      }, {
        short: "HPa",
        val: "1013.25027383088",
        long: "Hectopascal"
      }, {
        short: "inHg",
        val: "29.9212805862261",
        long: "Inch of Mercury (0℃)"
      }, {
        short: "inH2O",
        val: "406.793640435982",
        long: "Inch of Water (4℃)"
      }, {
        short: "kPa",
        val: "101.325027383089",
        long: "Kilopascal"
      }, {
        short: "MPa",
        val: "0.10132502738309",
        long: "MegaPascal"
      }, {
        short: "mbar",
        val: "1013.25027383088",
        long: "Millibar"
      }, {
        short: "mtorr",
        val: "760000.526890144",
        long: "Millitorr"
      }, {
        short: "mmHg",
        val: "760.000205385833",
        long: "Millimeter of Mercury (0℃)"
      }, {
        short: "mmH2O",
        val: "10332.5183423631",
        long: "Millimeter of Water (4℃)"
      }, {
        short: "Pa",
        val: "101325.027383088",
        long: "Pascal"
      }, {
        short: "psf",
        val: "2116.21372690676",
        long: "Pound-Force/Square-Foot"
      }, {
        short: "psi",
        val: "14.6959793215884",
        long: "Pound-Force/Square-Inch"
      }, {
        short: "Torr",
        val: "760.000526890144",
        long: "Torr"
      }
    ],

    "density": [

      {
        short: "lb/in3",
        val: "1",
        long: "Pound / Inch-Cubed"
      }, {
        short: "lb/ft3",
        val: "1728.00001173627",
        long: "Pound / Foot-Cubed"
      }, {
        short: "slug/ft3",
        val: "53.707964051111",
        long: "Slug / Foot-Cubed"
      }, {
        short: "grain/ft3",
        val: "12094392.8271733",
        long: "Grain / Foot-Cubed"
      }, {
        short: "grain/in3",
        val: "6999.99988928036",
        long: "Grain / Inch-Cubed"
      }, {
        short: "g/cm3",
        val: "27.679904710267",
        long: "Gram / Centimeter-Cubed"
      }, {
        short: "g/cup",
        val: "6.548788655679",
        long: "Gram / Cup"
      }, {
        short: "g/L",
        val: "27679.9047102671",
        long: "Gram / Liter"
      }, {
        short: "kg/cm3",
        val: "0.02767990471",
        long: "Kilogram / Centimeter-Cubed"
      }, {
        short: "kg/L",
        val: "27.679904710267",
        long: "Kilogram / Liter"
      }, {
        short: "kg/m3",
        val: "27679.9047102671",
        long: "Kilogram / Meter-Cubed"
      }
    ]
  };

  $.each(units, function(index, obj) {
    $.each(obj, function(short, val) {
      console.log(obj.index.short);
      console.log(obj.index.val);
    });
  });

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

【问题讨论】:

  • 在您的情况下,您可能希望使用一些 for(var type in units){ for(var property in units[type]){ } } 进行迭代
  • obj.index?你不是说obj[index]吗?
  • 只需使用纯 javascript for..in..
  • Javascript iterate object的可能重复
  • @ShaunakD:jQuery 的 $.each 对对象和数组都有效。

标签: javascript jquery multidimensional-array foreach


【解决方案1】:

你可能想做这样的事情:

Object.keys(units).forEach((key, index) => { // loop over the units keys
    units[key].forEach(object => { // loop over the objects in arrays
        // do your stuff with the objects
    });
});

【讨论】:

    【解决方案2】:
    $.each(units, function(index, obj) {
    console.log(index)
      $.each(obj, function(short, val ) {
        console.log(val.short);
        console.log(val.val);
      });
    });
    

    【讨论】:

    • 你离得很近。 Rocket Hazmat 只快了 1 分钟。
    【解决方案3】:

    当您使用 . 语法来引用对象属性时,您正在尝试访问该 literal 属性。

    例如,obj.index.short。这会查找名为index 的属性,然后查找名为short 的属性。我假设您希望使用 index 变量,以便您访问正确的属性。

    类似:obj[index].short。这也不起作用,因为您的 obj[index] 值是一个数组。

    你要做的是循环外部对象,然后循环每个属性(这是一个数组)并获取每个数组元素(对象)的值。

    试试这个:

    $.each(units, function(index, obj){
        // `index` is either "pressure" or "density"
        // `obj` is the value of that property (an array)
        $.each(obj, function(short, val){
            // `short` is the index in the array
            // `val` is each element in the array, it's an object
            console.log(val.short);
            console.log(val.val);
        });
    });
    

    【讨论】:

    • 谢谢!这很好用。我想我不应该使用“val”作为键
    • @Sanya:我猜你没有val.val,这可能看起来很傻。您可以将 val 保留为对象中的属性,只需更改代码以使用其他内容,例如 data.val 或其他内容。
    【解决方案4】:

    $(document).ready(function() {
      var units = {
        "pressure": [
          {
            short: "atm",
            val: "1",
            long: "Atmosphere (standard)"
          }, {
            short: "bar",
            val: "1.01325027383089",
            long: "Bar"
          }, {
            short: "cmHg",
            val: "76.0000526890144",
            long: "Centimeter of Mercury (0℃)"
          }, {
            short: "cmH2O",
            val: "1033.25183423631",
            long: "Centimeter of Water (4℃)"
          }, {
            short: "ft-H2O",
            val: "33.899503811341",
            long: "Foot of Water (4℃)"
          }, {
            short: "GPa",
            val: "0.00010132502738",
            long: "Gigapascal"
          }, {
            short: "HPa",
            val: "1013.25027383088",
            long: "Hectopascal"
          }, {
            short: "inHg",
            val: "29.9212805862261",
            long: "Inch of Mercury (0℃)"
          }, {
            short: "inH2O",
            val: "406.793640435982",
            long: "Inch of Water (4℃)"
          }, {
            short: "kPa",
            val: "101.325027383089",
            long: "Kilopascal"
          }, {
            short: "MPa",
            val: "0.10132502738309",
            long: "MegaPascal"
          }, {
            short: "mbar",
            val: "1013.25027383088",
            long: "Millibar"
          }, {
            short: "mtorr",
            val: "760000.526890144",
            long: "Millitorr"
          }, {
            short: "mmHg",
            val: "760.000205385833",
            long: "Millimeter of Mercury (0℃)"
          }, {
            short: "mmH2O",
            val: "10332.5183423631",
            long: "Millimeter of Water (4℃)"
          }, {
            short: "Pa",
            val: "101325.027383088",
            long: "Pascal"
          }, {
            short: "psf",
            val: "2116.21372690676",
            long: "Pound-Force/Square-Foot"
          }, {
            short: "psi",
            val: "14.6959793215884",
            long: "Pound-Force/Square-Inch"
          }, {
            short: "Torr",
            val: "760.000526890144",
            long: "Torr"
          }
        ],
    
        "density": [
    
          {
            short: "lb/in3",
            val: "1",
            long: "Pound / Inch-Cubed"
          }, {
            short: "lb/ft3",
            val: "1728.00001173627",
            long: "Pound / Foot-Cubed"
          }, {
            short: "slug/ft3",
            val: "53.707964051111",
            long: "Slug / Foot-Cubed"
          }, {
            short: "grain/ft3",
            val: "12094392.8271733",
            long: "Grain / Foot-Cubed"
          }, {
            short: "grain/in3",
            val: "6999.99988928036",
            long: "Grain / Inch-Cubed"
          }, {
            short: "g/cm3",
            val: "27.679904710267",
            long: "Gram / Centimeter-Cubed"
          }, {
            short: "g/cup",
            val: "6.548788655679",
            long: "Gram / Cup"
          }, {
            short: "g/L",
            val: "27679.9047102671",
            long: "Gram / Liter"
          }, {
            short: "kg/cm3",
            val: "0.02767990471",
            long: "Kilogram / Centimeter-Cubed"
          }, {
            short: "kg/L",
            val: "27.679904710267",
            long: "Kilogram / Liter"
          }, {
            short: "kg/m3",
            val: "27679.9047102671",
            long: "Kilogram / Meter-Cubed"
          }
        ]
      };
    
      $.each(units, function(i, obj) {     
          console.log(i);
         $.each(obj, function(j, obj2) {
             console.log(obj2.short +' : '+obj2.val+' , '+obj2.long);
         });
        
      });
    
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

    【讨论】:

      【解决方案5】:

      单位是一个对象,压力是这个对象的关键

      var _getPressure=units.pressure // will return value of key pressure
       _getPressure.forEach(function(item){ // use Array forEach to loop through array
       document.write('<pre>'+item.short+'--'+item.val+'</pre>')
       })
      

      JSFIDDLE

      【讨论】:

        猜你喜欢
        • 2014-02-14
        • 2015-04-04
        • 2012-11-03
        • 1970-01-01
        • 2015-03-28
        • 2014-06-17
        • 2011-12-07
        • 1970-01-01
        • 2017-01-29
        相关资源
        最近更新 更多