我得到了这样的对象:
var obj = {
0:{id: 1, name: 'one'},
1:{id: 2, name: 'two'},
2:{id: 3, name: 'three'},
3:{id: 4, name: 'four'}
};
我需要将键1下的项目从其当前位置移动到位置4(具有id: 4
的项目在此处),因此它应如下所示:
var obj = {
0:{id: 1, name: 'one'},
1:{id: 3, name: 'three'},
2:{id: 4, name: 'four'},
3:{id: 2, name: 'two'},
};
问题在于它是对象的对象,而不是数组。如果它是一个数组,我可以借助以下功能来实现:
function array_move(arr, old_index, new_index) {
if (new_index >= arr.length) {
var k = new_index - arr.length + 1;
while (k--) {
arr.push(undefined);
}
}
arr.splice(new_index, 0, arr.splice(old_index, 1)[0]);
};
但是在这种情况下,出现以下错误:
Uncaught TypeError: arr.splice is not a function
欢迎提出任何解决方法。谢谢。
答案 0 :(得分:1)
创建键和值的数组,然后对其进行排序:
var keys = Object.keys(obj);
var values = Object.values(obj);
var newObj = {};
values = array_move(values);
keys.forEach(function(el, i){
newObj[el] = values[i];
});