如何在数组中的指定索引位置推送对象?

时间:2018-01-23 07:56:21

标签: javascript

我有一个数组。

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的对象。虽然我将同一个对象推送到数组,但它将推送到与之前相同的位置。如果我做其他对象,也会发生同样的情况。

3 个答案:

答案 0 :(得分:2)

我刚尝试使用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);

答案 1 :(得分:1)

这看起来像两个不同的问题,一个是通过其属性过滤掉数组内的元素,第二个(如果它具有相同的键,则将新元素推回到相同的位置稍微棘手)。我认为你最好的选择是单独留下.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)

答案 2 :(得分:0)

替换数组元素使用:

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