Retrieving a property of a JSON object by index?

后端 未结 11 933
情书的邮戳
情书的邮戳 2020-12-02 13:28

Assuming this JSON object:

var obj = {
    \"set1\": [1, 2, 3],
    \"set2\": [4, 5, 6, 7, 8],
    \"set3\": [9, 10, 11, 12]
};

The \"set

相关标签:
11条回答
  • 2020-12-02 13:46

    I know this is an old question but I found a way to get the fields by index. You can do it by using the Object.keys method.

    When you call the Object.keys method it returns the keys in the order they were assigned (See the example below). I tested the method below in the following browsers:

    • Google Chrome version 43.0
    • Firefox version 33.1
    • Internet Explorer version 11

    I also wrote a small extension to the object class so you can call the nth key of the object using getByIndex.

    // Function to get the nth key from the object
    Object.prototype.getByIndex = function(index) {
      return this[Object.keys(this)[index]];
    };
    
    var obj1 = {
      "set1": [1, 2, 3],
      "set2": [4, 5, 6, 7, 8],
      "set3": [9, 10, 11, 12]
    };
    
    var obj2 = {
      "set2": [4, 5, 6, 7, 8],
      "set1": [1, 2, 3],
      "set3": [9, 10, 11, 12]
    };
    
    log('-- Obj1 --');
    log(obj1);
    log(Object.keys(obj1));
    log(obj1.getByIndex(0));
    
    
    log('-- Obj2 --');
    log(obj2);
    log(Object.keys(obj2));
    log(obj2.getByIndex(0));
    
    
    // Log function to make the snippet possible
    function log(x) {
      var d = document.createElement("div");
      if (typeof x === "object") {
        x = JSON.stringify(x, null, 4);
      }
      d.textContent= x;
      document.body.appendChild(d);
    }

    0 讨论(0)
  • 2020-12-02 13:48
    """
    This could be done in python as follows.
    Form the command as a string and then execute
    """
    context = {
        "whoami": "abc",
        "status": "0",
        "curStep": 2,
        "parentStepStatus": {
            "step1":[{"stepStatus": 0, "stepLog": "f1.log"}],
            "step2":[{"stepStatus": 0, "stepLog": "f2.log"}]
        }
    }
    def punc():
              i = 1
              while (i < 10):
                  x = "print(" + "context" + "['parentStepStatus']" + "['%s']"%("step%s")%(i) + ")"
                  exec(x)
                  i+=1
    punc()
    
    0 讨论(0)
  • 2020-12-02 13:50

    it is quite simple...

    var obj = {
        "set1": [1, 2, 3],
        "set2": [4, 5, 6, 7, 8],
        "set3": [9, 10, 11, 12]
    };
    
    jQuery.each(obj, function(i, val) {
    	console.log(i); // "set1"
    	console.log(val); // [1, 2, 3]
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

    0 讨论(0)
  • 2020-12-02 13:56

    No, there is no way to access the element by index in JavaScript objects.

    One solution to this if you have access to the source of this JSON, would be to change each element to a JSON object and stick the key inside of that object like this:

    var obj = [
        {"key":"set1", "data":[1, 2, 3]},
        {"key":"set2", "data":[4, 5, 6, 7, 8]},
        {"key":"set3", "data":[9, 10, 11, 12]}
    ];
    

    You would then be able to access the elements numerically:

    for(var i = 0; i < obj.length; i++) {
        var k = obj[i]['key'];
        var data = obj[i]['data'];
        //do something with k or data...
    }
    
    0 讨论(0)
  • 2020-12-02 13:58

    Jeroen Vervaeke's answer is modular and the works fine, but it can cause problems if it is using with jQuery or other libraries that count on "object-as-hashtables" feature of Javascript.

    I modified it a little to make usable with these libs.

    function getByIndex(obj, index) {
      return obj[Object.keys(obj)[index]];
    }
    
    0 讨论(0)
提交回复
热议问题