JSON分析拼接问题

JSON Parse splice issue

本文关键字:问题 拼接 JSON      更新时间:2023-09-26

我似乎不明白为什么拼接在这个例子中不能正常工作。

我读过无数拼接的堆栈溢出示例,似乎看不出有什么问题。

这段代码基本上应该从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_variations[0].splice(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); 

在Javascript中使用"delete"关键字。

delete myArray["lastname"];

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

.拼接

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

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

删除

delete运算符从对象中删除属性

所以你的代码应该看起来像

delete product_variations[0]["14"]

请记住,14数字是一个字符串,而不是一个数字,正如您在代码中所写的那样,因为这是数组中元素的名称。

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