使用Lodash根据内部对象元素条件移除对象
移除所有count字段值均为0的对象
需求说明
需要处理嵌套结构的数据,移除所有其l数组中所有count字段值都为0的对象(示例中的someid2和someid3),需注意list数组、l数组以及主对象内的对象长度均不固定。
原始数据结构示例:
[ { objectName: {...somefields}, list: [ { pr: {id: 'someid1'}, l: [ { ...someFields, count: 0 }, { ...someFields, count: 33 }, ] }, { // 需要移除该对象 pr: {id: 'someid2'}, l: [ { ...someFields, count: 0 }, { ...someFields, count: 0 }, { ...someFields, count: 0 } ] } ] }, { objectName: {...somefields}, list: [ { // 以及该对象 pr: {id: 'someid3'}, l: [ { ...someFields, count: 0 }, { ...someFields, count: 0 }, ] } ] } ]
解决方案
可以用JavaScript的数组方法结合处理嵌套结构:
// 数据过滤函数 const filterTargetItems = (rawData) => { return rawData.map(mainItem => { // 过滤list数组,保留至少有一个count不为0的对象 const filteredList = mainItem.list.filter(listItem => { // 检查当前对象的l数组是否存在count不为0的元素 return listItem.l.some(itemInL => itemInL.count !== 0); }); // 返回新对象,保留原字段并替换过滤后的list return { ...mainItem, list: filteredList }; }); }; // 使用示例 const originalData = [/* 你的原始数据 */]; const processedData = filterTargetItems(originalData);
代码说明
map:遍历主数组中的每个对象,保留原对象的其他字段,仅处理list数组filter:对每个list数组做过滤,只留下符合条件的对象some:检查l数组内是否存在至少一个count不为0的元素——只要有一个满足,就保留当前的list对象;反之则移除
处理后,所有l数组中count全为0的对象会被从list数组中清除,同时不会破坏原数据的其他结构。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

