繁体   English   中英

根据值过滤嵌套的 object 属性

[英]Filter nested object properties based on value

考虑以下数据:

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
}

我想知道是否有比使用let tasks = {}手动创建新array更好的方法? 我看过map但我不确定这是否有帮助。 我是新手,只是想了解是否有更清洁的更好方法。

您可以使用Object.entries获取条目数组,根据值的completed属性是否真实进行过滤,然后使用 Z497031794414A552435F90151AC3B54 将其转回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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM