在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ js 過濾數(shù)組元素

js 過濾數(shù)組元素

clipboard.png

[
{absoluteName: "/boot/", check_Child_State: 2},
{absoluteName: "/boot/grub/", check_Child_State: -1},
{absoluteName: "/boot/grub2/", check_Child_State: -1},
{absoluteName: "/data1/", check_Child_State: 1},
{absoluteName: "/data1/ccspconfig/", check_Child_State: 2},
{absoluteName: "/data1/ccspconfig/config-repo/", check_Child_State: 2},
{absoluteName: "/data1/ccspconfig/config-repo/properties/", check_Child_State: -1},
{absoluteName: "/dev/", check_Child_State: 2},
{absoluteName: "/dev/block/", check_Child_State: -1},
{absoluteName: "/dev/bsg/", check_Child_State: -1},
{absoluteName: "/dev/bus/", check_Child_State: -1},
{absoluteName: "/dev/char/", check_Child_State: -1},
{absoluteName: "/dev/cpu/", check_Child_State: -1},
{absoluteName: "/dev/disk/", check_Child_State: -1},
{absoluteName: "/dev/dri/", check_Child_State: -1},
{absoluteName: "/dev/fd/", check_Child_State: -1},
{absoluteName: "/dev/hugepages/", check_Child_State: -1},
{absoluteName: "/etc/", check_Child_State: -1}
]

clipboard.png

只需要圖中標(biāo)注的元素
check_Child_State : 1表示半勾選狀態(tài)

               -1表示勾選狀態(tài)(對應(yīng)子元素)
                2表示父元素勾選,對應(yīng)的子元素也全部勾選。

現(xiàn)在處理的是,對勾選的元素進(jìn)行過濾處理,如果父元素勾選,只需要父元素,如果子元素沒有全部勾選,父元素處于半勾選狀態(tài),這時,只需要勾選的子元素。
先對數(shù)組處理

  function reduceArray(array){
    var reducePath = [],len=array.length;
    if(len>0) {
      for(var i=0;i<len;i++) {
        if(array[i].check_Child_State === -1 || array[i].check_Child_State === 2) {
          reducePath.push(array[i].absoluteName);
        }
      }
    }
    return reducePath;
  }

只得到勾選的元素,半勾選的去除掉,只保留勾選的。
接下來,需要對勾選的過濾。

[
{absoluteName: "/boot/", check_Child_State: 2},
{absoluteName: "/boot/grub/", check_Child_State: -1},
{absoluteName: "/boot/grub2/", check_Child_State: -1},
{absoluteName: "/data1/ccspconfig/", check_Child_State: 2},
{absoluteName: "/data1/ccspconfig/config-repo/", check_Child_State: 2},
{absoluteName: "/data1/ccspconfig/config-repo/properties/", check_Child_State: -1},
{absoluteName: "/dev/", check_Child_State: 2},
{absoluteName: "/dev/block/", check_Child_State: -1},
{absoluteName: "/dev/bsg/", check_Child_State: -1},
{absoluteName: "/dev/bus/", check_Child_State: -1},
{absoluteName: "/dev/char/", check_Child_State: -1},
{absoluteName: "/dev/cpu/", check_Child_State: -1},
{absoluteName: "/dev/disk/", check_Child_State: -1},
{absoluteName: "/dev/dri/", check_Child_State: -1},
{absoluteName: "/dev/fd/", check_Child_State: -1},
{absoluteName: "/dev/hugepages/", check_Child_State: -1},
{absoluteName: "/etc/", check_Child_State: -1}
]

最終需要的是:

[
{absoluteName: "/boot/", check_Child_State: 2},
{absoluteName: "/data1/ccspconfig/", check_Child_State: 2},
{absoluteName: "/dev/", check_Child_State: 2},
{absoluteName: "/etc/", check_Child_State: -1}
]

求指教

回答
編輯回答
敢試
// 從你的半成品開始
const harfResult = [
    { absoluteName: "/boot/", check_Child_State: 2 },
    { absoluteName: "/boot/grub/", check_Child_State: -1 },
    { absoluteName: "/boot/grub2/", check_Child_State: -1 },
    { absoluteName: "/data1/ccspconfig/", check_Child_State: 2 },
    { absoluteName: "/data1/ccspconfig/config-repo/", check_Child_State: 2 },
    { absoluteName: "/data1/ccspconfig/config-repo/properties/", check_Child_State: -1 },
    { absoluteName: "/dev/", check_Child_State: 2 },
    { absoluteName: "/dev/block/", check_Child_State: -1 },
    { absoluteName: "/dev/bsg/", check_Child_State: -1 },
    { absoluteName: "/dev/bus/", check_Child_State: -1 },
    { absoluteName: "/dev/char/", check_Child_State: -1 },
    { absoluteName: "/dev/cpu/", check_Child_State: -1 },
    { absoluteName: "/dev/disk/", check_Child_State: -1 },
    { absoluteName: "/dev/dri/", check_Child_State: -1 },
    { absoluteName: "/dev/fd/", check_Child_State: -1 },
    { absoluteName: "/dev/hugepages/", check_Child_State: -1 },
    { absoluteName: "/etc/", check_Child_State: -1 }
];

// 先得到全部狀態(tài)為 2 的 absoluteName
const parents = harfResult
    .filter(m => m.check_Child_State === 2)
    .map(m => m.absoluteName);


// 檢查并去掉 parents 中所有子元素
const result = harfResult.filter(m => {
    // 檢查 m 是否是 parents 中某個的子項,不等,且前面匹配
    return !parents
        .some(name => m.absoluteName !== name && m.absoluteName.startsWith(name));
});

console.log(result);

clipboard.png

2017年4月24日 23:42