原本的json
[{
"cslbArr": [{
"cslb": "规格参数",
"csArr": [{
"key": "总质量",
"val": "32250kg"
}, {
"key": "轴距",
"val": "4600+1350mm"
}, {
"key": "长",
"val": "10620mm"
}, {
"key": "宽",
"val": "2500mm"
}, {
"key": "高",
"val": "3880mm"
}]
}, {
"cslb": "性能参数",
"csArr": [{
"key": "灭火剂装载量",
"val": "13900kg"
}, {
"key": "工作高度",
"val": "20m"
}, {
"key": "工作幅度",
"val": "12m"
}, {
"key": "消防泵流量",
"val": "50 L/s"
}, {
"key": "消防炮最大射程",
"val": "≥60m"
}, {
"key": "工作斗载荷",
"val": "/"
}, {
"key": "消防炮流量",
"val": "50 L/s"
}]
}]
}, {
"cslbArr": [{
"cslb": "规格参数",
"csArr": [{
"key": "总质量",
"val": "18100kg"
}, {
"key": "轴距",
"val": "4500mm"
}, {
"key": "长",
"val": "9670mm×"
}, {
"key": "宽",
"val": "3880mm"
}, {
"key": "高",
"val": "2500mm"
}]
}, {
"cslb": "性能参数",
"csArr": [{
"key": "灭火剂装载量",
"val": "/"
}, {
"key": "工作高度",
"val": "32m"
}, {
"key": "工作幅度",
"val": "20m"
}, {
"key": "消防泵流量",
"val": "/"
}, {
"key": "消防炮最大射程",
"val": "≥70m"
}, {
"key": "工作斗载荷",
"val": "500kg"
}, {
"key": "消防炮流量",
"val": "60L/s"
}]
}]
}, {
"cslbArr": [{
"cslb": "规格参数",
"csArr": [{
"key": "机长",
"val": "16m"
}, {
"key": "机宽",
"val": "11m"
}, {
"key": "翼展",
"val": "4.9m"
}]
}, {
"cslb": "性能参数",
"csArr": [{
"key": "最大起飞重量",
"val": "4800kg"
}, {
"key": "载员",
"val": "16人"
}, {
"key": "最大速度",
"val": "180km/h"
}, {
"key": "飞行高度",
"val": "0.6-1.2m"
}, {
"key": "适航海况",
"val": "3级"
}]
}]
}]
想要的到的json结果
[{
"cslb": "规格参数",
"csArr": [{
"key": "总质量",
"val": ["32250kg", "18100kg", ""]
}, {
"key": "轴距",
"val": ["4600+1350mm", "4500mm", ""]
}, {
"key": "长",
"val": ["10620mm", "9670mm×", ""]
}, {
"key": "宽",
"val": ["2500mm", "3880mm", ""]
}, {
"key": "高",
"val": ["3880mm", "2500mm", ""]
}, {
"key": "机长",
"val": ["", "", "16m"]
}, {
"key": "机宽",
"val": ["", "", "11m"]
}, {
"key": "翼展",
"val": ["", "", "4.9m"]
}]
}, {
"cslb": "性能参数",
"csArr": [{
"key": "灭火剂装载量",
"val": ["13900kg", "/", ""]
}, {
"key": "工作高度",
"val": ["20m", "32m", ""]
}, {
"key": "工作幅度",
"val": ["12m", "20m", ""]
}, {
"key": "消防泵流量",
"val": ["50 L/s", "/", ""]
}, {
"key": "消防炮最大射程",
"val": ["≥60m", "≥70m", ""]
}, {
"key": "工作斗载荷",
"val": ["/", "500kg", ""]
}, {
"key": "消防炮流量",
"val": ["50 L/s", "60L/s", ""]
}, {
"key": "最大起飞重量",
"val": ["", "", "4800kg"]
}, {
"key": "载员",
"val": ["", "", "16人"]
}, {
"key": "最大速度",
"val": ["", "", "180km/h"]
}, {
"key": "飞行高度",
"val": ["", "", "0.6-1.2m"]
}, {
"key": "适航海况",
"val": ["", "", "3级"]
}]
}]
var arr = [{
"cslbArr": [{
"cslb": "规格参数",
"csArr": [{
"key": "总质量",
"val": "32250kg"
}, {
"key": "轴距",
"val": "4600+1350mm"
}, {
"key": "长",
"val": "10620mm"
}, {
"key": "宽",
"val": "2500mm"
}, {
"key": "高",
"val": "3880mm"
}]
}, {
"cslb": "性能参数",
"csArr": [{
"key": "灭火剂装载量",
"val": "13900kg"
}, {
"key": "工作高度",
"val": "20m"
}, {
"key": "工作幅度",
"val": "12m"
}, {
"key": "消防泵流量",
"val": "50 L/s"
}, {
"key": "消防炮最大射程",
"val": "≥60m"
}, {
"key": "工作斗载荷",
"val": "/"
}, {
"key": "消防炮流量",
"val": "50 L/s"
}]
}]
}, {
"cslbArr": [{
"cslb": "规格参数",
"csArr": [{
"key": "总质量",
"val": "18100kg"
}, {
"key": "轴距",
"val": "4500mm"
}, {
"key": "长",
"val": "9670mm×"
}, {
"key": "宽",
"val": "3880mm"
}, {
"key": "高",
"val": "2500mm"
}]
}, {
"cslb": "性能参数",
"csArr": [{
"key": "灭火剂装载量",
"val": "/"
}, {
"key": "工作高度",
"val": "32m"
}, {
"key": "工作幅度",
"val": "20m"
}, {
"key": "消防泵流量",
"val": "/"
}, {
"key": "消防炮最大射程",
"val": "≥70m"
}, {
"key": "工作斗载荷",
"val": "500kg"
}, {
"key": "消防炮流量",
"val": "60L/s"
}]
}]
}, {
"cslbArr": [{
"cslb": "规格参数",
"csArr": [{
"key": "机长",
"val": "16m"
}, {
"key": "机宽",
"val": "11m"
}, {
"key": "翼展",
"val": "4.9m"
}]
}, {
"cslb": "性能参数",
"csArr": [{
"key": "最大起飞重量",
"val": "4800kg"
}, {
"key": "载员",
"val": "16人"
}, {
"key": "最大速度",
"val": "180km/h"
}, {
"key": "飞行高度",
"val": "0.6-1.2m"
}, {
"key": "适航海况",
"val": "3级"
}]
}]
}];
function isInArr(arr, item, key) {
var sameItem;
var isIn = arr.some(function (value) {
if (value[key] == item[key]) {
sameItem = value;
return true;
}
});
return [isIn, sameItem];
}
function rebuildArr(arr) {
var newArr = [];
arr.forEach((item1) => {
item1["cslbArr"].forEach((item2) => {
var [isIn1, sameItem] = isInArr(newArr, item2, "cslb");
if (isIn1) {
item2["csArr"].forEach((item3) => {
var [isIn2, subItem] = isInArr(sameItem["csArr"], item3, "key");
if (isIn2) {
subItem["val"].push(item3["val"]);
} else {
if (typeof item3["val"] == "string") {
item3["val"] = [item3["val"]];
}
sameItem["csArr"].push(item3);
}
});
} else {
item2["csArr"].forEach((value) => {
if (typeof value["val"] == "string") {
value["val"] = [value["val"]];
}
});
newArr.push(item2);
}
});
});
return newArr;
}
var newArr = rebuildArr(arr);
console.log(JSON.stringify(newArr));
var arr=[{
"cslbArr": [{
"cslb": "规格参数",
"csArr": [{
"key": "总质量",
"val": "32250kg"
}, {
"key": "轴距",
"val": "4600+1350mm"
}, {
"key": "长",
"val": "10620mm"
}, {
"key": "宽",
"val": "2500mm"
}, {
"key": "高",
"val": "3880mm"
}]
}, {
"cslb": "性能参数",
"csArr": [{
"key": "灭火剂装载量",
"val": "13900kg"
}, {
"key": "工作高度",
"val": "20m"
}, {
"key": "工作幅度",
"val": "12m"
}, {
"key": "消防泵流量",
"val": "50 L/s"
}, {
"key": "消防炮最大射程",
"val": "≥60m"
}, {
"key": "工作斗载荷",
"val": "/"
}, {
"key": "消防炮流量",
"val": "50 L/s"
}]
}]
}, {
"cslbArr": [{
"cslb": "规格参数",
"csArr": [{
"key": "总质量",
"val": "18100kg"
}, {
"key": "轴距",
"val": "4500mm"
}, {
"key": "长",
"val": "9670mm×"
}, {
"key": "宽",
"val": "3880mm"
}, {
"key": "高",
"val": "2500mm"
}]
}, {
"cslb": "性能参数",
"csArr": [{
"key": "灭火剂装载量",
"val": "/"
}, {
"key": "工作高度",
"val": "32m"
}, {
"key": "工作幅度",
"val": "20m"
}, {
"key": "消防泵流量",
"val": "/"
}, {
"key": "消防炮最大射程",
"val": "≥70m"
}, {
"key": "工作斗载荷",
"val": "500kg"
}, {
"key": "消防炮流量",
"val": "60L/s"
}]
}]
}, {
"cslbArr": [{
"cslb": "规格参数",
"csArr": [{
"key": "机长",
"val": "16m"
}, {
"key": "机宽",
"val": "11m"
}, {
"key": "翼展",
"val": "4.9m"
}]
}, {
"cslb": "性能参数",
"csArr": [{
"key": "最大起飞重量",
"val": "4800kg"
}, {
"key": "载员",
"val": "16人"
}, {
"key": "最大速度",
"val": "180km/h"
}, {
"key": "飞行高度",
"val": "0.6-1.2m"
}, {
"key": "适航海况",
"val": "3级"
}]
}]
}];
function test(arr) {
var newarray=[{
"cslb": "规格参数",
"csArr": []}, {
"cslb": "性能参数",
"csArr": []}];
arr.forEach(function(value,keyindex){
newarray.forEach(function(valueIndex,key){
if(valueIndex.cslb==value.cslbArr[key].cslb){
valueIndex.csArr.push(value.cslbArr[key].csArr);
}
})
})
return newarray;
}
console.log(test(arr));
//然后数组合并就行
问题已经用其他方式解决。多谢大家了。