以下のコードを見て、反応状態の中にある特定のキー/値のペアを含むアイテムの数を得る良い方法はありますか?オブジェクト(JS、React)の値をカウントするよりスマートな方法
この方法は、通過するリストが大きくなるとボトルネックを引き起こす可能性があるようです。あなたがあなたの状態の構造を変更しない場合、その後、あなたはをループのいくつかの並べ替えを行うと、カウントしなければならない
class App extends React.Component {
constructor() {
super();
this.state = {
animals: [
{type: 'cat'},
{type: 'dog'},
{type: 'cat'},
]
};
}
render() {
return(
<div className="app">
<Categories state={this.state} />
</div>
);
}
}
class Categories extends React.Component {
constructor() {
super();
this.countItems = this.countItems.bind(this);
}
countItems(type) {
var count = 0;
for(var i = 0; i < this.props.state.animals.length; i++) {
if(this.props.state.animals[i].type === type) {
count++;
}
}
return count;
}
render() {
return(
<div className="categories">
<div>Total animals: {this.props.state.animals.length}</div>
<div>Cats: {this.countItems('cat')}</div>
<div>Dogs: {this.countItems('dog')}</div>
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById('container'));
<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="container"></div>