jQuery将对象中的项目从一个位置移动到另一个位置

时间:2019-08-19 12:13:17

标签: javascript jquery

我得到了这样的对象:

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

欢迎提出任何解决方法。谢谢。

1 个答案:

答案 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]; 
});