对象键的数字顺序从0 JavaScript重新排列

时间:2018-11-15 13:06:06

标签: javascript

    var obj = {
      0 : 'value 0',
      1 : 'value 1',
      2 : 'value 2',
      3 : 'value 3',
      4 : 'value 4'
    }

delete obj[2];

执行上述操作时,将其与键2的键值对删除。 到这里为止。但是我想要的是将输出键设置为0 1 3 4,但我想重新排列键,例如0 1 2 3

5 个答案:

答案 0 :(得分:1)

因为它是一个数组,我使用数组为您提供。如果从其中删除一个项目,它将自动更改密钥。例如:

var a = [
     'value 0',
     'value 1',
     'value 2',
     'value 3',
     'value 4',
]
a[2].pop()

答案 1 :(得分:1)

您可以获取对象的值,而键是正32位整数(可以是数组的整数),则可以将此数组分配给对象,并使用新的键获取新的对象。

使用的方法:

var object = { 0: 'value 0', 1: 'value 1', 2: 'value 2', 3: 'value 3', 4: 'value 4' }

delete object[2];

object = Object.assign({}, Object.values(object));

console.log(object);

答案 2 :(得分:1)

您可以执行以下操作,在删除后循环源数组并重新创建其键。

window.onload = function(){

 var obj = {
      0 : 'value 0',
      1 : 'value 1',
      2 : 'value 2',
      3 : 'value 3',
      4 : 'value 4'
    }

console.log(obj);

delete obj[2];

reIndexArray(obj);

function reIndexArray(fromArray)
{
  var startIndex = 0;
  var toArray = {};

  for(var key in fromArray)
  {
    toArray[startIndex] = obj[key];
    startIndex++
  }
  
  console.log(toArray);
}






}

答案 3 :(得分:0)

您可以使用Object.values将其更改为Array并使用.splice方法。如果对象具有长度,则可以使用Array.from方法代替Object.values

var obj = {
    0 : 'value 0',
    1 : 'value 1',
    2 : 'value 2',
    3 : 'value 3',
    4 : 'value 4'
};

var arr = Object.values(obj);
// ['value 1', 'value 2', 'value 3', 'value 4']

// Remove a value from key 2.
arr.splice(2, 1); // splice(from[, amount[, ...values to push]])
// arr = ['value 1', 'value 2', 'value 4']

如果要返回原始对象,可以使用Object.assign

Object.assign(obj, arr);
// obj = {0: 'value 0', 1: 'value 1', 2: 'value 3', 3: 'value 4', 4: 'value 4'}

// There is no value of key 5 in arr. So Object.assign can't replace the key 5. You have to delete it.
delete obj[4];
// obj = {0: 'value 0', 1: 'value 1', 2: 'value 3', 3: 'value 4'}

答案 4 :(得分:0)

您也可以使用Map代替常规对象。但是取决于您的用例。

const map = new Map([[0, 'value0 '],[1, 'value1 '],[2, 'value2']]);

map.delete(1)

const values = [...map.values()];

const newMap = new Map(values.map((value, index) => [index, value]))