如何在javascript中反转对象?

时间:2016-04-30 18:50:58

标签: javascript

我想在JavaScript中反转一个对象。 例如:

输入:obj ={1: 'banana', 2: 'apple',3:'orange' }

输出:['orange','apple','banana' ]

我尝试使用' Array.prototype.reverse.apply(obj)',但无法获得结果。

 var obj ={1: 'banana', 2: 'apple',3:'orange' };
 var res =Array.prototype.reverse.apply(obj);
 console.log(res); // return the same object, not reverse

Array.prototype.reverse()的其他用法是什么?

4 个答案:

答案 0 :(得分:12)

您可以先将几乎类似数组的对象转换为实数,然后使用.reverse()

Object.assign([], {1:'banana', 2:'apple', 3:'orange'}).reverse();
// [ "orange", "apple", "banana", <1 empty slot> ]

最后的空插槽,因为您的第一个索引是1而不是0。您可以使用.length--.pop()删除空广告位。

或者,如果您想借用.reverse并在同一个对象上调用它,它必须是一个类似于完全数组的对象。也就是说,它需要length属性:

Array.prototype.reverse.call({1:'banana', 2:'apple', 3:'orange', length:4});
// {0:"orange", 1:"apple", 3:"banana", length:4}

请注意,它将返回相同的完全类数组的对象,因此它不会成为真正的数组。然后,您可以使用delete删除length属性。

答案 1 :(得分:9)

这是对象旋转的我的实现

    function reverseObject(object) {
        var newObject = {};
        var keys = [];

        for (var key in object) {
            keys.push(key);
        }

        for (var i = keys.length - 1; i >= 0; i--) {
          var value = object[keys[i]];
          newObject[keys[i]]= value;
        }       

        return newObject;
      }

答案 2 :(得分:1)

没有必要这样做,因为对象的属性没有顺序。 JavaScript中不保证对象中的属性顺序;

自ECMAScript 2015以来,使用Map对象可以替代。 Map与Object和guarantees the keys order

共享一些相似之处

答案 3 :(得分:-2)

$('#listData').append('<li>'+resultset.rows.item(i).name+'<input type="image" value="view" src="img/view.png" alt="button" width="20" height="20"/></li>').listview('refresh');



$('#listData').on('click','input', function(e) {
e.stopImmediatePropagation();
var btn = $(this).val();
if (btn == "view"){
    $('#listData').on('click', function() {

alert('Selected Name=' + $(this).text());
});
}
});