首页 > Web开发 > 详细

[Immutable.js] Transforming Immutable Data with Reduce

时间:2016-02-22 06:44:14      阅读:189      评论:0      收藏:0      [点我收藏+]

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

原文:http://www.cnblogs.com/Answer1215/p/5206013.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!