对象数组的处理

257 阅读3分钟

删除对象中的空值

  • 方法一:
let obj={a:1,b:''};
Object.keys(obj).map((item) => {
    if (!obj[item]) {
         delete obj[item];
     }
     return true;
 });
 console.log(obj) //{a:1}
  • 方法二
for ( let key in obj ){
	if ( obj[key] === '' ){
		delete obj[key]
	}
}

取出两个数组中不重复的值

  • filter
let arr1=[1,2,3,4],arr2=[2,3];
let newArr=arr1.filter(i=>!arr2.includes(i)) //[1,4]
  • map+filter
let arr1=[1,2,3,4],arr2=[2,3];
let newArr=arr1.map(i=>{
    if(!arr2.includes(i)) return i
}).filter(Boolean)

filter(Boolean) 过滤数组中的所有假值

获取数组中满足条件的对象存入新数组

let list = [{ name: '111', age: 1 }, { name: '222', age: 2 }, { name: '3330', age: 3 }];
let data = [1, 2];

let a = list.filter(i => data.includes(i.age))
let b = list.map(i => {
    if (data.includes(i.age)) {
        return i
    }
}).filter(Boolean)
let c = list.reduce((n, v) => {
    if (data.includes(v.age)) {
        n.push(v)
    }
    return n
}, [])
console.log(a); //[{ name: '111', age: 1 }, { name: '222', age: 2 }]
console.log(b); //[{ name: '111', age: 1 }, { name: '222', age: 2 }]
console.log(c); //[{ name: '111', age: 1 }, { name: '222', age: 2 }]

根据数组对象中的某个属性进行分类排序

let arr=[
    {
        "progressStage": "已评审",
        "checkMoney": 14,
        "projName": "金华市中医医院网络安全等级保护测评服务",
        "untName": "金华市中医医院"
    },
    {
        "progressStage": "已评审",
        "checkMoney": 27.1,
        "projName": "金华市第五医院智慧医疗信用就医(医后付)接口",
        "untName": "金华市第五医院"
    },
    {
        "progressStage": "已评审",
        "checkMoney": 6,
        "projName": "金华市第五医院网络安全运维服务",
        "untName": "金华市第五医院"
    },
    {
        "progressStage": "已评审",
        "checkMoney": 9.98,
        "projName": "金华市中心医院中普达PDA保外按需付费维修服务",
        "untName": "金华市中心医院"
    },
    {
        "progressStage": "已评审",
        "checkMoney": 5.011,
        "projName": "2022年卫生监督智慧指挥平台的维护和管理项目",
        "untName": "金华市卫生监督所"
    }
]

点击按钮排序=>排序后的顺序

[
    {
        "progressStage": "已评审",
        "checkMoney": 27.1,
        "projName": "金华市第五医院智慧医疗信用就医(医后付)接口",
        "untName": "金华市第五医院"
    },
    {
        "progressStage": "已评审",
        "checkMoney": 6,
        "projName": "金华市第五医院网络安全运维服务",
        "untName": "金华市第五医院"
    },
    {
        "progressStage": "已评审",
        "checkMoney": 5.011,
        "projName": "2022年卫生监督智慧指挥平台的维护和管理项目",
        "untName": "金华市卫生监督所"
    },
    {
        "progressStage": "已评审",
        "checkMoney": 9.98,
        "projName": "金华市中心医院中普达PDA保外按需付费维修服务",
        "untName": "金华市中心医院"
    },
    {
        "progressStage": "已评审",
        "checkMoney": 14,
        "projName": "金华市中医医院网络安全等级保护测评服务",
        "untName": "金华市中医医院"
    }
]
  • 方法一:
function changeData(list) {
    let obj={};

    for(let i of list){
        if(obj[i.untName]?.length){
            obj[i.untName].push(i)
        }else{
            obj[i.untName]=[]
            obj[i.untName].push(i)
        } 
    }
    let arr=[]
    for(let i in obj){
        arr.push(...obj[i])
    }
    return arr
    
}
// console.log(changeData(list));
  • 方法二:
function changeData(list) {
    return list.sort((a, b) => {
        return a.untName.localeCompare(b.untName)
    })
}
// console.log(changeData(list));

遍历取出子项

let arr = [
    {
        "id": "select_4ii9wzo9",
        "name": "盘点仓库",
        "type": "select",
        "children": [],
        "dataBind": true
    },
    {
        "type": "td",
        "children": [
            {
                "id": "table_jr3ojvnm",
                "name": "子表单",
                "type": "table",
                "children": [
                    {
                        "id": "custom_pp36pjn4",
                        "name": "关联产品",
                        "type": "custom",
                        "children": [],
                        "dataBind": true,
                        "el": "fmk-rel-consult"
                    },
                    {
                        "id": "input_xdtxypte",
                        "name": "产品名称",
                        "type": "input",
                        "children": [],
                        "dataBind": true
                    },
                    {
                        "id": "input_96lnzq9d",
                        "name": "库存",
                        "type": "input",
                        "children": [],
                        "dataBind": true
                    }
                ],
                "dataBind": true
            }
        ]
    }
]
//取出type不是'custom', 'td', 'table'的子项
function filterType(arr) {
    const result = []
    arr.forEach(item => {
        if (['custom', 'td', 'table'].includes(item.type)) {
            if (item.children) {
                result.push(...filterType(item.children))
            }
        } else {
            result.push(item)
        }
    })
    return result
}
console.log(filterType(arr));
// result
[
    {
        "id": "select_4ii9wzo9",
        "name": "盘点仓库",
        "type": "select",
        "children": [],
        "dataBind": true
    },
    {
        "id": "input_xdtxypte",
        "name": "产品名称",
        "type": "input",
        "children": [],
        "dataBind": true
    },
    {
        "id": "input_96lnzq9d",
        "name": "库存",
        "type": "input",
        "children": [],
        "dataBind": true
    }
]