javascript - 合并 JSON 数组

标签 javascript jquery json

我有一个产品数组 (json)(大约 5000 个),其中每个产品由两个数组表示,如下所示;

["PC01","Product 1","11"],
["PC01","Product 1","17"]

唯一的区别是,11 和 17 字符串分别代表产品的第一个和第二个价格。

我正在尝试找到一种方法将该数组合并为一个数组,以便每个产品都表示为一个,例如: [“PC01”,“产品1”,“11”,“17”]

我尝试过循环并形成一个产品对象,由于各种原因,我发现这些产品不太安全,其中之一是价格顺序未知。因此,一开始我可能会首先获得最高价格,然后获得最低价格,而另一方面,另一个数组将首先获得最低价格,然后获得最高价格。这是我当前的代码;

var products = [];
$.getJSON('data.json', function (data) {
    $.each(data, function (key, val) {
        if (!key == 0) {
               // because I use the previous arrays info, 
               // only start if we HAVE a previous array hence;
            if (data[key][0] != data[key - 1][0]) {
                var o = {}
                o.ProductCode = val[0];
                o.ProductName = val[1];
                o.Price1 = val[3];
                o.Price2 = data[key - 1][3];
                products.push(o);
            }
        }
    });
});

正如我所说,这依赖于每个产品作为两个数组存在并假设第二个价格最高的事实。

所以,我基本上试图找到解析 json 以合并所有双数组的最佳方法,如果您能给我一些想法,我将不胜感激..

编辑: 示例数据:

注意:示例数据包含的信息比我最初在问题中写入的信息更多,例如库存数量、增值税税率等,但为了防止混淆,我省略了这些信息。

[
    [
        "AD.0001 ",
        "AD ALOE VERA MOUTHWASH w�th FLUORIDE 250ML ",
        " 691",
        " 11.51",
        " 16",
        " 96"
    ],
    [
        "AD.0001 ",
        "AD ALOE VERA MOUTHWASH w�th FLUORIDE 250ML ",
        " 691",
        " 17",
        " 16",
        " 96"
    ],
    [
        "AD.0002 ",
        "AD ALOE VERA MOUTHWASH 250ML ",
        " 692",
        " 11.51",
        " 16",
        " 75"
    ],
    [
        "AD.0002 ",
        "AD ALOE VERA MOUTHWASH 250ML ",
        " 692",
        " 17",
        " 16",
        " 75"
    ]
]

最佳答案

尝试这样的事情:

var productsbycode = {};
var products = [];
$.getJSON('data.json', function (data) {
    $.each(data, function (key, val) {
        if(typeof productsbycode[val[0]] !== "object"){
            productsbycode[val[0]] = {name: val[1], prices: [val[2]]};      
        } else{
            productsbycode[val[0]].prices.push(val[2]);
        }
    });
    $.each(productsbycode, function(key, val){
        var price1 = val['prices'][0];
        var price2 = val['prices'][1];
        if(price1 < price2){
            products.push([key, val['name'], price1, price2]);
        } else{
            products.push([key, val['name'], price2, price1]);
        }
    });
});

JSFiddle .

它可以按任何顺序运行,并且按照您的要求进行操作。

更新:价格现在将首先显示最低价格,然后显示最高价格。

关于javascript - 合并 JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33910411/

相关文章:

javascript - 附加到 DOM 后如何访问图像

javascript - 使用 jquery 操作导航菜单

javascript - 查找 div 中第一次出现的类

json - 核心 OWASP ModSecurity - 允许 JSON

json - 使用 jq 附加 JSON 对象

javascript - 如何将时间戳添加到 package.json 中的脚本中?

javascript - 如何在 Javascript 中获取整个 div 的范围偏移量?

javascript - 通过类名获取某个 div 内的元素

javascript - bootstrap-select:将选项添加到多个选择框后,它无法正确刷新

javascript - ionic 分页