2017-03-08 131 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 ... –