Как отфильтровать массив объектов в javascript? - PullRequest
0 голосов
/ 23 марта 2020

Вот мой ввод:

const data = [
  { group: [{ label: "Can View" }, { label: "Can Create" }] },
  { topgroup: [{ label: "Can View" }, { label: "Can Create" }] },
  { emptyGorup: [] }
];

Я преобразую массив объекта в объект, используя этот код

метод 1:

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:[]}

Мой вопрос заключается в том, что я не хочу получать свойство объекта, если свойство объекта пусто []. Например, в моем выводе я вижу свойство объекта emptygroup - [].

 {emptygroup:[]}.

Мой ожидаемый результат будет, если emptygroup будет []

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

Как я могу это сделать?

Ответы [ 3 ]

3 голосов
/ 23 марта 2020

Попробуйте проверить длину массива

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)
2 голосов
/ 23 марта 2020

Вы можете расширить свой текущий код. После того, как вы получите объект, вы можете отфильтровать ключ с пустым массивом, используя фильтр, и снова построить объект из отфильтрованных значений

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)
1 голос
/ 23 марта 2020

Вы можете добавить условие в уменьшение:

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;
  }, {});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...