2017-03-08 135 views
3

我有这样更改属性名称动态

var taskText = { 
    0: "t1", 
    1: "t2", 
    2: "t3", 
    3: "t4" 
} 

对象我要去删除使用delete1财产这样

delete vm.taskItem[1] 

现在的结果是这样的

{ 
    0: "t1", 
    2: "t3", 
    3: "t4" 
} 

我的问题是,有什么办法可以将下一个属性名称还原为deleti ng等。我需要的是这样的

{ 
    0: "t1", 
    1: "t3", 
    2: "t4" 
} 
+0

为什么不使用数组和拼接? –

+0

至于我的需求我不得不使用一个对象 –

回答

2

的对象,您可以遍历排序键和值赋给递减键删除,然后最后的关键。

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);

+0

不错。谢谢 –

0

我认为它更好地使用JavaScript数组。

使用JavaScript数组,删除任何元素将自动更改其他元素的索引,而无需执行任何操作。另外,添加一个元素将处理这种情况。由于你的密钥在这里是简单的数字,我认为数组将是一个更好的解决方案。

1

var taskText = { 
 
    0: "t1", 
 
    1: "t2", 
 
    2: "t3", 
 
    3: "t4" 
 
} 
 

 
Object.prototype.deleteByKey = function(key) { 
 
var i = 0; \t 
 
for(var k in this) { 
 
if (k != key) { 
 
    this[i] = this[k]; 
 
    i++; 
 
} 
 
} 
 
}; 
 

 
taskText.deleteByKey(1); 
 

 
console.log(taskText);

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 
+0

我们如何通过javascript求和两个数字? 我们应该包括jQuery ... –