javascript - 数组中按字段列出的项目长度

标签 javascript reactjs

如何从数组中获取包含特定值的对象的数量?

使用 componentDidMount 获取 Firestore db 中存储的数据

componentDidMount() {
 db.collection(`company/${this.props.userID}/campaigns`).onSnapshot(collection => {
  const campaigns = collection.docs.map(doc => doc.data());
  this.setState({ 
    campaigns,
   });
 });
}

这会将数据装载到 this.state 中,但我想通过其 status 字段获取每个数据的计数值。下面是一个示例,我试图获取 status = active draft 条目的 length >暂停

class App extends React.Component {
  constructor() {
    super();
    this.state = {
      campaigns: [{
          id: 1,
          status: "draft",
        },
        {
          id: 2,
          status: "active",
        },
        {
          id: 3,
          status: "draft",
        },
        {
          id: 4,
          status: "paused",
        }
      ]
    };
  }

  render() {
    const totalCampaigns = this.state.campaigns
    const activeCampaigns = this.state.campaigns.filter(campaign => campaign.status === "active")
    const draftCampaigns = this.state.campaigns.filter(campaign => campaign.status === "draft")
    const pausedCampaigns = this.state.campaigns.filter(campaign => campaign.status === "paused")
    return (
      <div>
        total {totalCampaigns.length}
        Active {activeCampaigns.length}
        Drafts {draftCampaigns.length}
        Paused {pausedCampaigns.length}
      </div>
    );
  }
}

ReactDOM.render( < App / > , document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div id="root"></div>

您能否帮助我了解我做错了什么,或者是否有更好的方法?

最佳答案

state.campaigns上使用reduce方法并返回一个对象,其中键将是status并且该值将是该状态出现的次数

let state = {
  campaigns: [{
      id: 1,
      status: "draft",
    },
    {
      id: 2,
      status: "active",
    },
    {
      id: 3,
      status: "draft",
    },
    {
      id: 4,
      status: "paused",
    }
  ]
};

let getCount = state.campaigns.reduce(function(acc, curr) {
  if (!acc.hasOwnProperty(curr.status)) {
    acc[curr.status] = 1
  } else {
    acc[curr.status] += 1

  }

  return acc;


}, {})
console.log(getCount)

render() {
    const totalCampaigns =  // here goes the the getCount
    return (
      <div>
         Active {getCount.draft}
        Drafts {getCount.active}
        Paused {getCount.paused}
      </div>
    );
  }

关于javascript - 数组中按字段列出的项目长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51571322/

相关文章:

javascript - 如何在 React Native Android 中单击抽屉导航菜单的 2 个 View 之间导航?

javascript - 如何在 Bootstrap 日期时间选择器中禁用从今天开始的过去日期?

javascript - 在ajax jquery中显示json响应,

javascript - 如何在 React 应用程序中传递授权 token

reactjs - Jest 测试模拟——在另一个函数中模拟获取

reactjs - 在 React 中隐藏和显示外部组件

reactjs - 如何从父组件更新不受控制/只读输入值?

javascript - jQuery 延迟触发功能

javascript - browserify/webpack 破解简单的 HTML 文件(函数未定义)

javascript - 类型错误 : Cannot read properties of undefined (reading 'prototype' ) React Typescript + Express