JS 将对象数组a中不包含数组b里的元素的项去除

案例一:后台侧边栏菜单权限控制

var a = [
        {
          
    name: "aa", children: [{
          
    name: "aa1" }, {
          
    name: "aa2" }] },
        {
          
    name: "bb", children: [{
          
    name: "bb1" }, {
          
    name: "bb2" }] },
        {
          
    name: "cc", children: [{
          
    name: "cc1" }, {
          
    name: "cc2" }] },
        {
          
    name: "dd", children: [{
          
    name: "dd1" }, {
          
    name: "dd2" }] },
        {
          
    name: "ee", children: [{
          
    name: "ee1" }, {
          
    name: "ee2" }] },
      ];
var b = ["aa1","aa2","cc1", "bb2","dd1" ];
//目标对象
var mune = [
        {
          
    name: "aa", children: [{
          
    name: "aa1" },{
          
    name: "aa2" }] },
        {
          
    name: "bb", children: [{
          
    name: "bb2" }] },
        {
          
    name: "cc", children: [{
          
    name: "cc1" }] },
        {
          
    name: "dd", children: [{
          
    name: "dd1" }] },
      ];

解决:
let mm = []
a.forEach(v => {
          
   
    let cc = []
    for (let c = 0; c < v.children.length; c++) {
          
   
        let cv = v.children[c].name
        let f = b.find(s => s == cv)
        if (f) cc.push({
          
    name: f })
    }
    v.children = cc
    if (cc.length > 0) mm.push(v)
})
console.log(mm)

//最优解法:
for (var i = 0; i < a.length; i++) {
          
   
    for (var j = 0; j < a[i].children.length; j++) {
          
   
        if (b.indexOf(a[i].children[j].name) == -1) {
          
   
            a[i].children.splice(j, 1);
            j--;
        }
     }
     if (a[i].children.length == 0) {
          
   
        a.splice(i, 1);
        i--;
     }
}

案例二:

var a=[red]
this.deviceList=[
{
          
   
          type: "red",
          deviceId: "C001",
          deviceNum: "设备故障",
        },
        {
          
   
          type: "green",
          deviceId: "C002",
          deviceNum: "品质异常",
        },
        {
          
   
          type: "blue",
          deviceId: "C003",
          deviceNum: "工艺异常",
        },
        {
          
   
          type: "orange",
          deviceId: "C004",
          deviceNum: "缺料",
        },
]

for(let i=0;i<this.deviceList.length;i++){
          
   
    var index=0
    for(let j=0;j<a.length;j++){
          
   
        if(a[j]===this.deviceList[i].type){
          
   
            index=i
        }
    }
    this.deviceList.splice(index,1)
}
经验分享 程序员 微信小程序 职场和发展