从JSON中删除项目,'重置'来自json obj的索引 - jquery

时间:2014-05-15 09:16:18

标签: javascript jquery json

我想从我的JSON对象中删除一个特定的项目,保留对象的其余部分,但我希望指出“重新计算”或其他东西......

    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 :(得分:1)

首先,将对象更改为数组:

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

然后您可以使用splice()从数组中删除元素:

obj.splice(1, 1); // removes the item at index 1

这样您就可以省去重置索引的需要,因为您只需使用数组本身的序数。

Example fiddle

答案 1 :(得分:0)

如果您无法修改该数据的结构(这基本上意味着将其转换为ECMAscript数组),您可以稍微破解它。基本上你可以将Object变成一个ECMAscript数组。

obj.length = Object.keys( obj ).length;
obj.splice = [].splice;

现在你可以像普通的数组一样对待它

obj.splice(1,1);

这将移除位置1处的元素。您需要通过删除.length.splice属性来恢复该对象的完整性。

delete obj.length;
delete obj.splice;

这可能不是最优雅的解决方案,但它可以完成这项工作。