How to iterate over a JavaScript object?

后端 未结 18 1704
失恋的感觉
失恋的感觉 2020-11-21 22:52

I have an object in JavaScript:

{
    abc: \'...\',
    bca: \'...\',
    zzz: \'...\',
    xxx: \'...\',
    ccc: \'...\',
    // ...
}

I

相关标签:
18条回答
  • 2020-11-21 23:14
    <script type="text/javascript">
    // method 1
    var images = {};
    images['name'] = {};
    images['family'] = {};
    images[1] = {};
    images['name'][5] = "Mehdi";
    images['family'][8] = "Mohammadpour";
    images['family']['ok'] = 123456;
    images[1][22] = 2602;
    images[1][22] = 2602;
    images[1][22] = 2602;
    images[1][22] = 2602;
    images[1][23] = 2602;
    
    for (const [key1, value1] of Object.entries(images)){
        for (const [key2, value2] of Object.entries(value1)){
            console.log(`${key1} => ${key2}: ${value2}`);
        }
    }
    
    
    console.log("=============================");
    
    // method 2
    var arr = [];
    for(var x = 0; x < 5; x++){
         arr[x] = [];    
         for(var y = 0; y < 5; y++){ 
             arr[x][y] = x*y;    
         }    
     }
    
    for(var i = 0; i < arr.length; i++) {
        var cube = arr[i];
        for(var j = 0; j < cube.length; j++) {
            console.log("cube[" + i + "][" + j + "] = " + cube[j]);
        }
    }
    
    </script>
    
    0 讨论(0)
  • 2020-11-21 23:23

    If you have a simple object you can iterate through it using the following code:

    let myObj = {
      abc: '...',
      bca: '...',
      zzz: '...',
      xxx: '...',
      ccc: '...',
      // ...
    };
    
    let objKeys = Object.keys(myObj);
    
    //Now we can use objKeys to iterate over myObj
    
    for (item of objKeys) {
      //this will print out the keys
      console.log('key:', item);
      
      //this will print out the values 
      console.log('value:', myObj[item]);
    }

    If you have a nested object you can iterate through it using the following code:

    let b = {
      one: {
        a: 1,
        b: 2,
        c: 3
      },
      two: {
        a: 4,
        b: 5,
        c: 6
      },
      three: {
        a: 7,
        b: 8,
        c: 9
      }
    };
    
    let myKeys = Object.keys(b);
    
    for (item of myKeys) {
      //print the key
      console.log('Key', item)
      
      //print the value (which will be another object)
      console.log('Value', b[item])
      
      //print the nested value
      console.log('Nested value', b[item]['a'])
    }

    If you have array of objects you can iterate through it using the following code:

    let c = [
    {
      a: 1,
      b: 2
    },
    {
      a: 3,
      b: 4
    }
    ];
    
    for(item of c){
    //print the whole object individually 
    console.log('object', item);
    
    //print the value inside the object
    console.log('value', item['a']);
    }

    0 讨论(0)
  • 2020-11-21 23:25

    If you wanted to iterate the whole object at once you could use for in loop:

    for (var i in obj) {
      ...
    }
    

    But if you want to divide the object into parts in fact you cannot. There's no guarantee that properties in the object are in any specified order. Therefore, I can think of two solutions.

    First of them is to "remove" already read properties:

    var i = 0;
    for (var key in obj) {
        console.log(obj[key]);
        delete obj[key];
        if ( ++i > 300) break;
    }
    

    Another solution I can think of is to use Array of Arrays instead of the object:

    var obj = [['key1', 'value1'], ['key2', 'value2']];
    

    Then, standard for loop will work.

    0 讨论(0)
  • 2020-11-21 23:25

    For object iteration we usually use a for..in loop. This structure will loop through all enumerable properties, including ones who are inherited via prototypal inheritance. For example:

    let obj = {
      prop1: '1',
      prop2: '2'
    }
    
    for(let el in obj) {
      console.log(el);
      console.log(obj[el]);
    }

    However, for..in will loop over all enumerable elements and this will not able us to split the iteration in chunks. To achieve this we can use the built in Object.keys() function to retrieve all the keys of an object in an array. We then can split up the iteration into multiple for loops and access the properties using the keys array. For example:

    let obj = {
      prop1: '1',
      prop2: '2',
      prop3: '3',
      prop4: '4',
    };
    
    const keys = Object.keys(obj);
    console.log(keys);
    
    
    for (let i = 0; i < 2; i++) {
      console.log(obj[keys[i]]);
    }
    
    
    for (let i = 2; i < 4; i++) {
      console.log(obj[keys[i]]);
    }

    0 讨论(0)
  • 2020-11-21 23:28

    Here is another iteration solution for modern browsers:

    Object.keys(obj)
      .filter((k, i) => i >= 100 && i < 300)
      .forEach(k => console.log(obj[k]));
    

    Or without the filter function:

    Object.keys(obj).forEach((k, i) => {
        if (i >= 100 && i < 300) {
            console.log(obj[k]);
        }
    });
    

    However you must consider that properties in JavaScript object are not sorted, i.e. have no order.

    0 讨论(0)
  • 2020-11-21 23:28

    Yes. You can loop through an object using for loop. Here is an example

    var myObj = {
        abc: 'ABC',
        bca: 'BCA',
        zzz: 'ZZZ',
        xxx: 'XXX',
        ccc: 'CCC',
    }
    
    var k = Object.keys (myObj);
    for (var i = 0; i < k.length; i++) {
        console.log (k[i] + ": " + myObj[k[i]]);
    }

    NOTE: the example mentioned above will only work in IE9+. See Objec.keys browser support here.

    0 讨论(0)
提交回复
热议问题