根据条件删除嵌套JSON中的元素
Remove elements inside nested JSON based on condition
下面是我的JSON对象,我想在其中从没有trips的组中删除groupType
。即trips.length===0
。如果该特定客户端对象的所有trips数组都为空,我还想删除整个客户端对象。。
let fruitsArray= [
{
"fruit": {
"id": 1,
"name": "Mango"
},
"group": [
{
"groupType": {
"id": 1,
"name": "A"
},
"trips": []
},
{
"groupType": {
"id": 2,
"name": "B"
},
"trips": []
},
{
"groupType": {
"id": 3,
"name": "C"
},
"trips": []
},
{
"groupType": {
"id": 4,
"name": "D"
},
"trips": []
}
]
},
{
"fruit": {
"id": 1,
"name": "Apple"
},
"group": [
{
"groupType": {
"id": 1,
"name": "A"
},
"trips": []
},
{
"groupType": {
"id": 2,
"name": "B"
},
"trips": [
{
"trip": {
"id": 62,
"deliverySlotId": 900000000000001
}
}
]
},
{
"groupType": {
"id": 3,
"name": "C"
},
"trips": []
},
{
"groupType": {
"id": 4,
"name": "D"
},
"trips": []
}
]
},
{
"fruit": {
"id": 95,
"name": "Banana"
},
"group": [
{
"groupType": {
"id": 4,
"name": "A1"
},
"trips": [
{
"trip": {
"id": 62,
"deliverySlotId": 900000000000001
}
},
{
"trip": {
"id": 63,
"deliverySlotId": 900000000000001
}
},
{
"trip": {
"id": 65,
"deliverySlotId": 900000000000001,
"orderId": 22
}
}
]
}
]
}
]
我尝试过的代码返回了0 groupType
的所有元素。。
let finalArray = fruitsArray.map((group) => {
return group.group.filter((trip) => {
return trip.trips.length > 0;
})
})
您可以将map与filter结合使用。或者,您也可以使用reduce方法。
我在下面写了两个例子。
let fruitsArray= [
{
"fruit": {
"id": 1,
"name": "Mango"
},
"group": [
{
"groupType": {
"id": 1,
"name": "A"
},
"trips": []
},
{
"groupType": {
"id": 2,
"name": "B"
},
"trips": []
},
{
"groupType": {
"id": 3,
"name": "C"
},
"trips": []
},
{
"groupType": {
"id": 4,
"name": "D"
},
"trips": []
}
]
},
{
"fruit": {
"id": 1,
"name": "Apple"
},
"group": [
{
"groupType": {
"id": 1,
"name": "A"
},
"trips": []
},
{
"groupType": {
"id": 2,
"name": "B"
},
"trips": [
{
"trip": {
"id": 62,
"deliverySlotId": 900000000000001
}
}
]
},
{
"groupType": {
"id": 3,
"name": "C"
},
"trips": []
},
{
"groupType": {
"id": 4,
"name": "D"
},
"trips": []
}
]
},
{
"fruit": {
"id": 95,
"name": "Banana"
},
"group": [
{
"groupType": {
"id": 4,
"name": "A1"
},
"trips": [
{
"trip": {
"id": 62,
"deliverySlotId": 900000000000001
}
},
{
"trip": {
"id": 63,
"deliverySlotId": 900000000000001
}
},
{
"trip": {
"id": 65,
"deliverySlotId": 900000000000001,
"orderId": 22
}
}
]
}
]
}
];
var filteredFruits = fruitsArray.map((fruit) => {
fruit.group = fruit.group.filter((group) => group.trips.length);
return fruit;
}).filter((fruit) => fruit.group.length);
console.log(filteredFruits);
// alternative example with reduce
var reducedFruits = fruitsArray.reduce((prev, next) => {
next.group = next.group.filter((group) => group.trips.length);
return next.group.length ? prev.concat([next]) : prev;
}, []);
console.log(reducedFruits);
var fruitsArray= [
{
"fruit": {
"id": 1,
"name": "Mango"
},
"group": [
{
"groupType": {
"id": 1,
"name": "A"
},
"trips": []
},
{
"groupType": {
"id": 2,
"name": "B"
},
"trips": []
},
{
"groupType": {
"id": 3,
"name": "C"
},
"trips": []
},
{
"groupType": {
"id": 4,
"name": "D"
},
"trips": []
}
]
},
{
"fruit": {
"id": 1,
"name": "Apple"
},
"group": [
{
"groupType": {
"id": 1,
"name": "A"
},
"trips": []
},
{
"groupType": {
"id": 2,
"name": "B"
},
"trips": [
{
"trip": {
"id": 62,
"deliverySlotId": 900000000000001
}
}
]
},
{
"groupType": {
"id": 3,
"name": "C"
},
"trips": []
},
{
"groupType": {
"id": 4,
"name": "D"
},
"trips": []
}
]
},
{
"fruit": {
"id": 95,
"name": "Banana"
},
"group": [
{
"groupType": {
"id": 4,
"name": "A1"
},
"trips": [
{
"trip": {
"id": 62,
"deliverySlotId": 900000000000001
}
},
{
"trip": {
"id": 63,
"deliverySlotId": 900000000000001
}
},
{
"trip": {
"id": 65,
"deliverySlotId": 900000000000001,
"orderId": 22
}
}
]
}
]
}
]
for(var i=0;i<fruitsArray.length;i++){
var currentFruit = fruitsArray[i];
var currentFruitGroups = currentFruit.group;
var foundTrip =false;
for(var j=0;j<currentFruitGroups.length;j++){
var currentTrips = currentFruitGroups[j].trips;
if(!currentTrips.length){
currentFruitGroups.splice(j,1);
j--;
}else{
foundTrip = true;
}
}
if(!foundTrip){
fruitsArray.splice(i,1);
i--;
}
}
console.log(fruitsArray);
https://jsfiddle.net/485ue5zs/1/
let finalArray = fruitsArray.reduce((p, n) => {
const gt = n.group.filter(g => g.trips.length);
return gt.length ? p.concat({fruit: n.fruit, group: gt}) : p;
}, []);
相关文章:
- 访问JSON对象内部的数组元素
- Jquery移除或更改JSON根元素
- 元素名称上带有短划线 (-) 字符的 Json 对象
- 如何在html angular中显示嵌套的json元素
- 如何访问JSON元素
- 使用Underscore.js修改json数组中所选元素的更有效方法
- 从json数组中查找满足条件的特定元素的值
- 在JSON文件中查找一个元素,并将其显示为HTML
- 如何在php中按元素按字母顺序排列json文件
- 在JSON数组中进行迭代,并为其元素设置样式
- 从JSON.parse获取元素
- 使用JavaScript在Json中提取时,将数组的元素转换为String
- 如何使用javascript获取json元素
- 隐藏HTML元素中的JSON编码和解码
- 使用JSON和JavaScript添加额外的html列表元素
- 通过 id json, jquery 选择元素
- 如何使克隆的 DOM 元素 JSON 可序列化
- 循环元素json数组
- 获取数组中的元素(json格式)
- 添加元素 JSON