Фильтровать свойства вложенного объекта по значению - PullRequest
0 голосов
/ 16 апреля 2020

Рассмотрим следующие данные:

const state = {
  tasks: {
    'ID1': {
      name: "Go to shop",
      completed: false,
    },
    'ID2': {
      name: "Get bananas",
      completed: true,
    },
    'ID3': {
      name: "Get apples",
      completed: false,
    }
  }
}

Чтобы извлечь только те задачи, для которых completed установлено на true, можно использовать следующий код:

function getCompletedTasks(state) {
  let tasks = {}

  Object.keys(state.tasks).forEach((key) => {
    let task = state.tasks[key]

    if (task.completed) tasks[key] = task
  })

  return tasks
}

Я был Хотите знать, есть ли лучший способ, чем вручную создать новый array с let tasks = {}? Я посмотрел на map, но я не совсем уверен, что это может помочь. Я новичок ie, просто пытаюсь понять, есть ли способ чище, лучше.

1 Ответ

1 голос
/ 16 апреля 2020

Вы можете использовать Object.entries, чтобы получить массив записей, отфильтровать его по истинности свойства completed значения, а затем превратить его обратно в объект с Object.fromEntries:

const state = {
  tasks: {
    'ID1': {
      name: "Go to shop",
      completed: false,
    },
    'ID2': {
      name: "Get bananas",
      completed: true,
    },
    'ID3': {
      name: "Get apples",
      completed: false,
    }
  }
}

function getCompletedTasks(state) {
  return Object.fromEntries(
    Object.entries(state.tasks).filter(([, val]) => val.completed)
  );
}

console.log(getCompletedTasks(state));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...