为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

拉风的咖菲猫 2022-05-26 16:25:20
这是我的输入: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"]}我怎样才能做到这一点 ?
查看完整描述

3 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

尝试检查数组的长度


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)


查看完整回答
反对 回复 2022-05-26
?
慕慕森

TA贡献1856条经验 获得超17个赞

您可以扩展您当前的代码。获得对象后,您可以使用过滤器过滤掉带有空数组的键,并从过滤后的值再次构建对象


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)


查看完整回答
反对 回复 2022-05-26
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

您可以在 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;

  }, {});


查看完整回答
反对 回复 2022-05-26
  • 3 回答
  • 0 关注
  • 317 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信