//有两条json数据a和b,如下图:
//a的json中有一个fruit数组和stationery数组(可以为空),里面有名称和数量。
//b的json中对应的类型和特征
//需求:根据a和b,计算水果数量,组成如下表格。
//这种json对象里套数组有点懵,组成表格时,需要取a,b重新组成新的json吗?
谢谢.
var a = [{
"id": "1548208772510",
"area": "上海",
"fruit": [{
"fname": "苹果",
"fnum": 4
}],
"stationery": [],
},
{
"id": "1548208889319",
"area": "上海",
"fruit": [],
"stationery": [{
"sname": "钢笔",
"snum": 5
},
{
"sname": "毛笔",
"snum": 4
}
]
},
{
"id": "1548208889319",
"area": "上海",
"fruit": [{
"fname":"橘子",
"fnum": 3
}
],
"stationery": [{
"sname": "钢笔",
"snum": 1
},
{
"sname": "毛笔",
"snum": 9
}
]
}
];
var b = [
{
"id": "1548208889389",
"type": '水果',
"name": '苹果',
"feature": '又圆又甜'
},
{
"id": "1548208889387",
"type": '水果',
"name": '橘子',
"feature": '又圆又酸'
},
{
"id": "1548208889317",
"type": '文具',
"name": '毛笔',
"feature": '流畅'
},
{
"id": "1548208889387",
"type": '文具',
"name": '钢笔',
"feature": '帅气'
}
];
你的b对象中type属性有重名。我改变了一下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script>
var a = [{
"id": "1548208772510",
"area": "上海",
"fruit": [{
"fname": "苹果",
"fnum": 4
}],
"stationery": [],
},
{
"id": "1548208889319",
"area": "上海",
"fruit": [],
"stationery": [{
"sname": "钢笔",
"snum": 5
},
{
"sname": "毛笔",
"snum": 4
}
]
},
{
"id": "1548208889319",
"area": "上海",
"fruit": [{
"fname":"橘子",
"fnum": 3
}
],
"stationery": [{
"sname": "钢笔",
"snum": 1
},
{
"sname": "毛笔",
"snum": 9
}
]
}
];
var b = [
{
"id": "1548208889389",
"type": '水果',
"name": '苹果',
"feature": '又圆又甜'
},
{
"id": "1548208889387",
"type": '水果',
"name": '橘子',
"feature": '又圆又酸'
},
{
"id": "1548208889317",
"type": '文具',
"name": '毛笔',
"feature": '流畅'
},
{
"id": "1548208889387",
"type": '文具',
"name": '钢笔',
"feature": '帅气'
}
];
</script>
<table border="1">
<tr>
<th>类型</th>
<th>名称</th>
<th>数量</th>
<th>特征</th>
</tr>
<script type="text/javascript">
var numbers = {};
a.forEach(function(n1){
n1.fruit.forEach(function(n2){
numbers[n2.fname] = (numbers[n2.fname]||0) + n2.fnum;
});
n1.stationery.forEach(function(n2){
numbers[n2.sname] = (numbers[n2.sname]||0) + n2.snum;
});
});
b.forEach(function(obj){
document.write('<tr><td>'+obj.type+'</td><td>'+obj.name+'</td><td>'+numbers[obj.name]+'</td><td>'+obj.feature+'</td></tr>');
});
</script>
</table>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
hahahahahhahahahahaah
</body>
<script>
let a = [
{
"id": "1548208772510",
"area": "上海",
"fruit": [
{
"fname": "苹果",
"fnum": 4
}
],
"stationery": [],
},
{
"id": "1548208889319",
"area": "上海",
"fruit": [],
"stationery": [
{
"sname": "钢笔",
"snum": 5
},
{
"sname": "毛笔",
"snum": 4
}
]
},
{
"id": "1548208889319",
"area": "上海",
"fruit": [
{
"fname":"橘子",
"fnum": 3
}
],
"stationery": [
{
"sname": "钢笔",
"snum": 1
},
{
"sname": "毛笔",
"snum": 9
}
]
}
];
let b = [
{
"id": "1548208889389",
"type": '水果',
"name": '苹果',
"type": '又圆又甜'
},
{
"id": "1548208889387",
"type": '水果',
"name": '橘子',
"type": '又圆又酸'
},
{
"id": "1548208889317",
"type": '文具',
"name": '毛笔',
"type": '流畅'
},
{
"id": "1548208889387",
"type": '文具',
"name": '钢笔',
"type": '帅气'
}
];
//遍历b,给b的每一项新增number、arr属性
for(var i = 0; i < b.length;i++){
b[i].number = 0;
b[i].arr = [];
}
for(var i = 0; i < a.length;i++){
for(var j = 0;j < a[i].fruit.length;j++){
//把水果抽出来push到跟b里面一样名字的水果的arr中
for(k = 0; k < b.length;k++){
if(a[i].fruit[j].fname == b[k].name){
b[k].arr.push(a[i].fruit[j]);
}
}
}
for(var j = 0;j < a[i].stationery.length;j++){
//把文具抽出来push到跟b里面一样名字的文具的arr中
for(k = 0; k < b.length;k++){
if(a[i].stationery[j].sname == b[k].name){
b[k].arr.push(a[i].stationery[j]);
}
}
}
}
//然后再遍历b计算各自水果的数量
for(var i = 0;i < b.length;i++){
//遍历每一项的arr
var num = 0;
for(var j = 0; j < b[i].arr.length;j++){
if(b[i].arr[j].fnum){
num += b[i].arr[j].fnum
}
if(b[i].arr[j].snum){
num += b[i].arr[j].snum
}
}
b[i].number = num;
}
console.log('打印b你就会看到水果和文具全部抽出啦放到b里面去了,并且已经计算好了数量',b);
</script>
</html>
<br> var a = [{<br> "id": "1548208772510",<br> "area": "上海",<br> "fruit": [{<br> "fname": "苹果",<br> "fnum": 4<br> }],<br> "stationery": [],<br> },<br> {<br> "id": "1548208889319",<br> "area": "上海",<br> "fruit": [],<br> "stationery": [{<br> "sname": "钢笔",<br> "snum": 5<br> },<br> {<br> "sname": "毛笔",<br> "snum": 4<br> }<br> ]<br> },<br> {<br> "id": "1548208889329",<br> "area": "上海",<br> "fruit": [{<br> "fname":"橘子",<br> "fnum": 3<br> }<br> ],<br> "stationery": [{<br> "sname": "钢笔",<br> "snum": 1<br> },<br> {<br> "sname": "毛笔",<br> "snum": 9<br> }<br> ]<br> }<br> ];<br> var b = [<br> {<br> "id": "1548208889389",<br> "type": '水果',<br> "name": '苹果',<br> "types": '又圆又甜'<br> },<br> {<br> "id": "1548208889387",<br> "type": '水果',<br> "name": '橘子',<br> "types": '又圆又酸'<br> },<br> {<br> "id": "1548208889317",<br> "type": '文具',<br> "name": '毛笔',<br> "types": '流畅'<br> },<br> {<br> "id": "1548208889387",<br> "type": '文具',<br> "name": '钢笔',<br> "types": '帅气'<br> }<br> ];<br> let tab1=$("#tb")<br> let something="<tr style='background-color:#0066FF;'><td>类型</td><td>名称</td><td>数量</td><td>特征</td></tr>";<br> for (let i = 0;i<b.length;i++){<br> let model = b[i];<br> console.log(model);<br> let number=0;<br> for (let j=0;j<a.length;j++){<br> let something =a[j];<br> if (something.fruit.length>0){<br> if(something.fruit[0].fname==model.name){<br> number=number+something.fruit[0].fnum;<br> }<br> }<br> console.log(something.stationery.length);<br> let model1=something.stationery;<br> if (model1.length>0){<br> for (let k;k<model1.length;k++){<br> if(model1[k].sname==model.name){<br> number=number+something.stationery[n].snum<br> }<br> }<br> }<br> }<br> let type = model.type;<br> let types = model.types;<br> something+="<tr><td>"+type+"</td><td>"+model.name+"</td><td>"+number+"</td><td>"+types+"</td></tr>"<br> }<br> tab1.append(something)<br>