我有这样的对象
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'时减去所有键(刚删除的键之后)加一。
答案 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);