【问题标题】:How to push object in specified index position in array?如何将对象推送到数组中指定的索引位置?
【发布时间】:2018-01-23 07:56:20
【问题描述】:

我有一个数组。

var tableHeader = [
    {
        key: 1, 
        value: 'inputname', 
        defaultChecked: true, 
        columnName: 'input.name',
    }, {
        key: 3,
        value: 'callname',
        defaultChecked: true,
        columnName: 'call.name',
    }, {
        key: 4,
        value: 'rank',
        defaultChecked: true,
        columnName: 'call.rank',
    }, {
        key: 5,
        value: 'threshold',
        defaultChecked: true,
        columnName: 'call.threshold',
    }, {
        key: 9,
        value: 'matchname',
        defaultChecked: true,
        columnName: 'match.name',
    },
]

我的要求:我将删除具有键 3 的对象。虽然我会将同一个对象推送到数组,但它会推送到与以前相同的位置。如果我为其他对象做同样的事情。

【问题讨论】:

  • 你可以隐藏它...而不是删除
  • 执行此操作的廉价方法:var tableHeader = { 1: { key: 1, ... }, 3: {key: 3, ... } }(显然,tableHeader 现在是一个对象,而不是数组,因此这可能不起作用 - 取决于您的其他代码)

标签: javascript


【解决方案1】:

我刚刚在 Typescript 中尝试过,我不知道它对你有多大帮助,我在删除的对象位置添加了空字符串,之后我替换为原始对象

let removedObj, removedIndex: any;
this.tableHeader.forEach((ele, i) => {
  if (ele.key == 3) {
    removedObj = ele; removedIndex = i;
    this.tableHeader.splice(i, 1, '');
  }
});
this.tableHeader.splice(removedIndex, 1, removedObj);
console.log(this.tableHeader);

【讨论】:

    【解决方案2】:

    这看起来像两个不同的问题,一个是通过其属性过滤出数组中的元素,第二个(如果新元素具有相同的键,则将新元素推回同一位置会稍微复杂一些)。我认为您最好的选择是不理会 .push,而是在添加新元素(以恢复顺序)后查看 Array.filterArray.sort,如下所示:

    var tableHeader = [{
      key: 1,
      value: 'inputname',
      defaultChecked: true,
      columnName: 'input.name',
    }, {
      key: 3,
      value: 'callname',
      defaultChecked: true,
      columnName: 'call.name',
    }, {
      key: 4,
      value: 'rank',
      defaultChecked: true,
      columnName: 'call.rank',
    }, {
      key: 5,
      value: 'threshold',
      defaultChecked: true,
      columnName: 'call.threshold',
    }, {
      key: 9,
      value: 'matchname',
      defaultChecked: true,
      columnName: 'match.name',
    }, ]
    
    console.log('Original', tableHeader)
    
    //Filter out {key:3}
    tableHeader = tableHeader.filter(function(e) {
      return e.key !== 3
    })
    console.log('Filtered', tableHeader)
    
    tableHeader.push({
      key: 3,
      value: 'callname',
      defaultChecked: true,
      columnName: 'call.name',
    })
    tableHeader.sort(function(a, b) {
      return a.key - b.key
    })
    
    console.log('Resorted', tableHeader)

    【讨论】:

      【解决方案3】:

      替换数组元素使用:

      TheNewObject = { key: 9,
                       value: 'matchname',
                       defaultChecked: true,
                       columnName: 'match.name',};
      
      tableHeader[3] = TheNewObject; 
      

      就这样, 并搜索对象索引,您可以使用以下方法:

      function getObjectIndex(skey)
      {
          for (i = 0; i < tableHeader.length; i++) {
             obj = tableHeader[i];
             if (obj.hasOwnProperty('key') && obj.key == skey) {
                return i;
             }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2017-07-01
        • 1970-01-01
        • 2012-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-21
        • 1970-01-01
        • 2021-12-04
        相关资源
        最近更新 更多