我有一个产品数组 (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/