将所有对象键减一

时间:2018-08-06 21:49:54

标签: javascript object

我有这样的对象

let obj = {'0': {x:25, y:12}, '1': {x:55, y:6}, '2': {x:44, y:78} ,...}

现在,当我删除一个内部对象(键)delete obj[i];(基于它们的x,y)时,如果删除的内部对象设为“ 0”,则新对象没有“ 0”内部对象,它从'1'({'1': {x:55, y:6}, '2': {x:44, y:78} ,...})开始。以后会引起一些问题。

那我该如何解决呢?就像删除'0'时减去所有键(刚删除的键之后)加一。

4 个答案:

答案 0 :(得分:1)

您可以删除所需的对象,然后将数据移动到新对象,

    let obj = {'0': {x:25, y:12}, '1': {x:55, y:6}, '2': {x:44, y:78} }

    console.log("Before Delete");
    console.log(obj)
var deleteIndex =1;
    delete obj[deleteIndex];
    var obj2={};
    for (var k in obj){
      if (obj.hasOwnProperty(k)) {
           if(k > deleteIndex){
            obj2[k-1] =obj[k];
        }else{
            obj2[k] =obj[k];
        }
      }
    }
    obj=obj2;
        
    console.log("After Delete");
    console.log(obj);

答案 1 :(得分:1)

正如评论所建议的那样,您似乎希望该对象的行为类似于数组,这建议您只应使用数组:

[{x:25, y:12}, {x:55, y:6}, {x:44, y:78}]

但是,如果必须使用它,则可以快速将值作为数组,splice()取出元素,然后散布回数组。您需要稍微小心一点,因为对象不能保证其元素的顺序(另一个原因是首先使用数组)。

let obj = {'0': {x:25, y:12}, '1': {x:55, y:6}, '2': {x:44, y:78} }

let arr = Object.keys(obj).sort().map(k => obj[k]) // this will preserve order
arr.splice(1, 1)
obj = {...arr}

console.log(obj)

答案 2 :(得分:0)

obj[i]已消失,因为您已将其删除!如果要将其设置为其他值,请使用... obj[i] = { x: 0, y: 0 },它将创建一个新对象来代替旧对象。

或使用数组...

let obj = [ {x:25, y:12}, {x:55, y:6},{x:44, y:78} ,... ]

然后

obj.splice(0,1)

你有...

[ {x:55, y:6},{x:44, y:78} ,.. ]

有...

obj[0] is {x:55, y:6}

答案 3 :(得分:0)

删除元素的函数是什么?

let obj1 = {'0': {x:25, y:12}, '1': {x:55, y:6}, '2': {x:44, y:78}};
function del(o, index) {
    let ret = {}, j = 0;
    for (let i in o){
        if (o.hasOwnProperty(i) && ~~i != ~~index){
            ret[j++] = o[i]
        }
    }
    return ret;
}
let obj2 = del(obj1, 1);