为什么删除属性时对象索引不会重置?

时间:2017-04-05 03:21:58

标签: javascript

我试图从数组中删除一些对象:

    obj = {
    "0":{
        test: "test",
        test: "test"
    },
    "1": {
        test1: "test1",
        test1: "test1"
    },
    "2": {
        test2: "test2",
        test2: "test2"
    }
}

如果我删除了

这样的项目
delete obj[1];

我得到以下内容:

    obj = {
    "0":{
        test: "test",
        test: "test"
    },
    "2": {
        test2: "test2",
        test2: "test2"
    }
}

但是我想要使用索引0和1的obj。因为如果我问结果的.length(在删除项目之后)它会给我3并且我需要正确的长度申请书。

我意识到这是一个重复的问题(实际上是伪造的),但我一直在寻找的问题从未得到回答。我想这样做吗?有没有办法重置索引?

2 个答案:

答案 0 :(得分:2)

您的obj看似Array,但不是Array

你有什么:

  • 通过添加obj属性将Array转换为length并使用 ES6
  • 的Array.from(obj)
  • 使用Array.splice删除数组的项目。
  • Array
  • json object转换回Array.forEach

请参阅此代码段。

var obj = {
  "0": {
    test: "test",
    test: "test"
  },
  "1": {
    test1: "test1",
    test1: "test1"
  },
  "2": {
    test2: "test2",
    test2: "test2"
  },
  "length": 3
};

// method of ES5
//var arr1 = [].slice.call(obj);

// method of ES6
var arr1 = Array.from(obj);

console.log(arr1);

//delete arr1[1];
arr1.splice(1, 1);
console.log(arr1);

console.log(arr1.length);

// convert back to json
obj = {};
arr1.forEach(function(item, index) {
  obj[index] = item;
});

console.log(obj);

答案 1 :(得分:0)

这是一个用字符串索引的对象:

{
    "0":{
        test: "test",
        test: "test"
    },
    "1": {
        test1: "test1",
        test1: "test1"
    },
    "2": {
        test2: "test2",
        test2: "test2"
    }
}

要制作数组,请执行以下操作:

[
    {
        test: "test",
        test: "test"
    },
    {
        test1: "test1",
        test1: "test1"
    },
    {
        test2: "test2",
        test2: "test2"
    }
]

此外,以上是Javascript对象和Javascript数组。正确的JSON将具有字符串,非重复键:

[
    {
        "test": "test"
    },
    {
        "test1": "test1"
    },
    {
        "test2": "test2"
    }
]