我在网上查看了从object中删除一条记录并用下一条可用记录替换已删除记录的id的各种方法,这意味着在JavaScript中使用delete
运算符不会删除与之相关的记录id。假设我有一个对象:
obj= {
0:{},
1:{},
2:{},
3:{}
}
如果我想从该对象中删除一条记录,我会这样做的:
delete obj[1]
它会删除记录,但当我使用console.log(obj)
命令时,我会看到:
obj= {
0:{},
2:{},
3:{}
}
我知道一种方法是将这个对象转换为数组,然后从数组中删除元素并将其转换回对象。如果我必须避免所有这些转换,当我们删除记录时,在JavaScript对象中有没有一种方法,当我们删除obj[1]
记录时,obj返回如下:
obj= {
0:{},
1:{},
2:{}
}
相反,
obj= {
0:{},
2:{},
3:{}
}
发布于 2018-10-18 07:37:38
obj= {
0:{a: 1},
1:{b: 2},
2:{c: 5},
3:{d: 10}
}
const deleteElement = (index, obj) => {
delete obj[index];
return Object.keys(obj).reduce((agg, ele, i) => {
agg[i] = obj[ele];
return agg;
}, {});
}
console.log(deleteElement(2, obj))
发布于 2018-10-18 07:27:57
如前所述,没有。但是转换它的一种快速方法可能是
let Array=Object.keys(obj).map(x=>{
return obj[x]});
console.log(array);
发布于 2018-10-18 07:30:24
我可以考虑在不映射到数组的情况下执行此操作的唯一方法是将对象中的所有属性向下复制一个,并删除最后一项。
var myObject = {
0: {org: 0},
1: {org: 1},
2: {org: 2},
3: {org: 3}
}
const removeIndex = (index, obj) => {
var size = Object.keys(obj).length
if (index<size-1) {
for (let i = index; i<size-1; i++) {
obj[i] = obj[i+1];
}
}
delete obj[size-1]
}
removeIndex(1, myObject)
console.log(myObject)
但在现实中,您不应该使用对象来充当Array上的索引。我会修复服务器,如果你不能这样做,我会在页面加载时将其映射到一个数组中,并以这种方式使用它。如果服务器需要它,就把它映射回这个奇怪的对象。
如果你有一个大的对象,这个删除将需要一段时间,而在数组中,使用拼接将会很快。
https://stackoverflow.com/questions/52864774
复制相似问题