【问题标题】:Change property name dynamically动态更改属性名称
【发布时间】:2017-07-28 16:28:40
【问题描述】:

我有一个这样的对象

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

我将像这样使用delete 删除1 属性

delete vm.taskItem[1]

现在结果是这样的

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

我的问题是,有什么方法可以将下一个属性名称恢复为要删除的属性名称,依此类推。我需要的是这样的对象

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

【问题讨论】:

  • 为什么不用数组和拼接?
  • 至于我的要求,我必须使用一个对象

标签: javascript angularjs arrays object


【解决方案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);

【讨论】:

    【解决方案2】:

    您可以使用 Underscore.js 或 Lodash,有一个函数 'omit' 可以做到这一点。 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
    

    【讨论】:

      【解决方案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);

      【讨论】:

        【解决方案4】:

        我认为最好使用 JavaScript 数组。

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

        【讨论】:

          猜你喜欢
          • 2018-12-27
          • 2012-01-18
          • 2023-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-21
          • 1970-01-01
          相关资源
          最近更新 更多