我想在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()的其他用法是什么?
答案 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());
});
}
});