Javascript JSON解析拼接问题

Javascript JSON解析拼接问题,javascript,Javascript,在这种情况下,我似乎无法理解为什么splice不能正常工作 我已经阅读了无数的拼接堆栈溢出示例,但我似乎看不到任何问题 这段代码基本上应该从JSON数组中的第一项(并且仅此项)中删除索引14 var product_variations = JSON.parse('[{"0":"","1":"","2":"","3":"0.0000","4":"","5":"0.00","6":"0.00","7":"1.00","8":"0","9":"false","10":"false","11":[],

在这种情况下,我似乎无法理解为什么splice不能正常工作

我已经阅读了无数的拼接堆栈溢出示例,但我似乎看不到任何问题

这段代码基本上应该从JSON数组中的第一项(并且仅此项)中删除索引14

var product_variations = JSON.parse('[{"0":"","1":"","2":"","3":"0.0000","4":"","5":"0.00","6":"0.00","7":"1.00","8":"0","9":"false","10":"false","11":[],"12":"","13":"","14":"Red","15":"Small"}]');

product_variations[0].splice(14, 1); 

它不起作用,因为
splice
是一种可用于阵列而不是对象的方法

这是一个物体:

{"0":"","1":"","2":"","3":"0.0000","4":"","5":"0.00","6":"0.00","7":"1.00","8":"0","9":"false","10":"false","11":[],"12":"","13":"","14":"Red","15":"Small"}
实际上,会出现如下错误:

TypeError:undefined不是一个函数(评估“product_变体[0]。拼接(14,1)”)

您可以使用
delete
,或者将其转换为数组:

delete product_variations[0]["14"]
要将其转换为数组,您可以尝试:

function objectToArray(p){
    var keys = Object.keys(p);
    keys.sort(function(a, b) {
        return a - b;
    });

    var arr = [];
    for (var i = 0; i < keys.length; i++) {
        arr.push(p[keys[i]]);
    }
    return arr;
}

var product_variations = JSON.parse('[{"0":"","1":"","2":"","3":"0.0000","4":"","5":"0.00","6":"0.00","7":"1.00","8":"0","9":"false","10":"false","11":[],"12":"","13":"","14":"Red","15":"Small"}]');

var arr = objectToArray(product_variations[0]);

arr.splice(14, 1); 
函数objectToArray(p){
var-keys=Object.keys(p);
键。排序(功能(a、b){
返回a-b;
});
var-arr=[];
对于(变量i=0;i
在Javascript中使用“delete”关键字

delete myArray["lastname"];
如前所述,它不起作用,因为您的对象只是一个列表,而您使用的是一个对象(assoc数组)

拼接

splice()方法在数组中添加/删除项,并返回删除的项

注意:此方法更改原始数组

删除

delete操作符从对象中删除属性

所以你的代码应该是

delete product_variations[0]["14"]
请记住,正如您在代码中所写的那样,14号是一个字符串,而不是一个数字,因为它是数组中元素的名称


不过,我强烈建议您在看过您正在管理的代码后,将其切换到列表,因为关键字只类似于普通列表的索引(除了它们以1开头)

“记住14号是字符串,而不是数字”所有JavaScript键都转换为字符串,因此
14
"14“
被视为完全相同。@LyeFish啊,我不知道你能做到这一点。有没有一种简单的方法将对象索引移回14之后的1?”?在我发布的示例中,14之后只有15个,但在实际实现中,还有更多。@jdawg不,这不是一个简单的方法。我建议您将整个对象转换为一个数组,如果您愿意,我可以添加一个示例。当然可以添加一个示例。@jdawg我添加了一个示例。