Can I loop through a javascript object in reverse order?

后端 未结 4 729
感情败类
感情败类 2021-02-03 17:44

So I have a JavaScript object like this:

foo = {
  \"one\": \"some\",
  \"two\": \"thing\",
  \"three\": \"else\"
};

I can loop this like:

4条回答
  •  春和景丽
    2021-02-03 18:11

    Javascript objects don't have a guaranteed inherent order, so there doesn't exist a "reverse" order.

    4.3.3 Object An object is a member of the type Object. It is an unordered collection of properties each of which contains a primitive value, object, or function. A function stored in a property of an object is called a method.

    Browsers do seem to return the properties in the same order they were added to the object, but since this is not standard, you probably shouldn't rely on this behavior.

    A simple function that calls a function for each property in reverse order as that given by the browser's for..in, is this:

    // f is a function that has the obj as 'this' and the property name as first parameter
    function reverseForIn(obj, f) {
      var arr = [];
      for (var key in obj) {
        // add hasOwnPropertyCheck if needed
        arr.push(key);
      }
      for (var i=arr.length-1; i>=0; i--) {
        f.call(obj, arr[i]);
      }
    }
    
    //usage
    reverseForIn(obj, function(key){ console.log('KEY:', key, 'VALUE:', this[key]); });
    

    Working JsBin: http://jsbin.com/aPoBAbE/1/edit

    Again i say that the order of for..in is not guaranteed, so the reverse order is not guaranteed. Use with caution!

提交回复
热议问题