如何在javascript中过滤对象数组?

这是我的输入:


const data = [

  { group: [{ label: "Can View" }, { label: "Can Create" }] },

  { topgroup: [{ label: "Can View" }, { label: "Can Create" }] },

  { emptyGorup: [] }

];

我正在使用此代码将对象数组转换为对象


方法一:


let permissions =

  data &&

  data.reduce((a, b) => {

    const onlyKey = Object.keys(b)[0];

    a[onlyKey] = b[onlyKey].map(i => i.value);

    return a;

  }, {});

//Output : {group:["can view","can create"],topgroup:["can view","can create"],emptygroup:[]}

我的问题是,如果 Object 属性为空 [],我不想获取对象属性。例如,在我的输出中,我可以看到对象属性 emptygroup 是 []。


 {emptygroup:[]}.

如果 emptygroup 为 [],我的预期输出将是


//Output : {group:["can view","can create"],topgroup:["can view","can create"]}

我怎样才能做到这一点 ?


拉风的咖菲猫
浏览 318回答 3
3回答

凤凰求蛊

尝试检查数组的长度const permissionData = [  { group: [{ label: "Can View" }, { label: "Can Create" }] },  { topgroup: [{ label: "Can View" }, { label: "Can Create" }] },  { emptyGorup: [] }];let permissions =  permissionData &&  permissionData.reduce((a, b) => {    const onlyKey = Object.keys(b)[0];    if(b[onlyKey].length) {      a[onlyKey] = b[onlyKey].map(i => i.label);    }    return a;  }, {});  console.log(permissions)

慕慕森

您可以扩展您当前的代码。获得对象后,您可以使用过滤器过滤掉带有空数组的键,并从过滤后的值再次构建对象let obj = {  group: ["can view"],  topgroup: ["can view", "can create"],  emptygroup: []}let finalObj = Object.fromEntries(Object.entries(obj).filter(([key, value]) => Array.isArray(value) && value.length))console.log(finalObj)

天涯尽头无女友

您可以在 reduce 中添加条件:let permissions =  permissionData &&  permissionData.reduce((a, b) => {    const onlyKey = Object.keys(b)[0];    if (a[onlyKey]) {      a[onlyKey] = b[onlyKey].map(i => i.value);    }    return a;  }, {});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript