[Immutable.js] Transforming Immutable Data with Reduce
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Immutable.js] Transforming Immutable Data with Reduce相关的知识,希望对你有一定的参考价值。
Immutable.js iterables offer the reduce() method, a powerful and often misunderstood functional operator on which map(), filter(), groupBy(), etc. are built. The concept is simple: reduce transforms your iterable into something else, that‘s all. The name is misleading as you may or may not actually "reduce" anything. Let‘s replicate the groupBy() and filter() methods with reduce to illustrate how it works.
Assume you have a list to todos, each todo with a "completed" prop:
groupBy() like:
const todos = Immutable.List([ { id: 1, title: "Immutable.js", completed: true }, { id: 2, title: "RxJS", completed: false }, { id: 3, title: "ReactJS", completed: false } ]); const groupedTodos = todos.reduce( (acc, curr)=>{ let key = curr.completed ? "completed" : "Incompleted"; // Initial value is an Immutable Map object, so use get("completed") to get the Immutable.List(), then push the curr value into it let list = acc.get(key).push(curr); // Immutable return a new list from last push, so we need to set this list to the initial value return acc.set(key, list); }, Immutable.Map({"completed": Immutable.List(), "Incompleted": Immutable.List()})); console.log(groupedTodos.get("Incompleted").get(1).title); //"ReactJS"
filter() like:
// Get all imcompleted todos const filteredTodos = todos.reduce( (acc, curr)=>{ if(!curr.completed){ acc = acc.push(curr); } return acc; }, Immutable.List()); console.log(filteredTodos.get(1).title); // "ReactJS"
以上是关于[Immutable.js] Transforming Immutable Data with Reduce的主要内容,如果未能解决你的问题,请参考以下文章
[Immutable.js] Exploring Sequences and Range() in Immutable.js
[Immutable.js] Working with Subsets of an Immutable.js Map()
[Immutable.js] Lightning Fast Immutable.js Equality Checks with Hash Codes
[Immutable.js] Differences between the Immutable.js Map() and List()