我有一个像这样的对象
var taskText = {
0: "t1",
1: "t2",
2: "t3",
3: "t4"
}
我要使用1
这样删除delete
属性
delete vm.taskItem[1]
现在结果就像这样
{
0: "t1",
2: "t3",
3: "t4"
}
我的问题是,有什么方法可以将下一个属性名称还原为删除的属性名称,依此类推。我需要的是像这样的对象
{
0: "t1",
1: "t3",
2: "t4"
}
答案 0 :(得分:3)
您可以迭代已排序的键并将值分配给递减的键,然后删除最后一个键。
function deleteKey(object, key) {
var keys = Object.keys(object).sort(function (a, b) {
return a - b;
});
keys.forEach(function (k) {
if (k > key) {
object[k - 1] = object[k];
}
});
delete object[keys.pop()];
}
var taskText = { 0: "t1", 1: "t2", 2: "t3", 3: "t4" };
deleteKey(taskText, 1);
console.log(taskText);
答案 1 :(得分:2)
你可以使用Underscore.js或Lodash,有一个功能'省略'那会做的。 click here for documentation
var taskText = {
'a': "t1",
'b': "t2",
'c': "t3",
'd': "t4"
}
_.omit(taskText ,'b'); //It will return a new object
=> {'a' : 't1', 'c' : 't3', 'd' : 't4'} //result
答案 2 :(得分:1)
var taskText = {
0: "t1",
1: "t2",
2: "t3",
3: "t4"
}
Object.prototype.deleteByKey = function(key) {
var i = 0;
for(var k in this) {
if (k != key) {
this[i] = this[k];
i++;
}
}
};
taskText.deleteByKey(1);
console.log(taskText);

答案 3 :(得分:0)
我认为你使用JavaScript数组会更好。
使用JavaScript数组,删除任何元素将自动更改其他元素的索引,而无需您执行任何操作。此外,添加元素将处理这种情况。由于你的密钥是普通数字,我认为数组是一个更好的解决方案。