使用复杂的不可变对象

时间:2016-10-28 01:03:31

标签: javascript reactjs redux immutability immutable.js

我有多维数组,我希望它具有不可变性。但是我仍然不太确定我应该如何使用多维不可变对象。

让我们说我的结构与此类似:

// data
{
    // item
    {
        name: someName,
        todos: [
            { id: 1, name: todoName },
            { id: 2, name: todoName2 }
        ]
    }
}

如何提取唯一的待办事项清单?

// Saving todos
let uniqueTodos = []
// Saving ids of todos
let saved = []

// I want to make data immutable list
data.forEach(item => {
  item.todos.forEach(todo => {
    if (saved.indexOf(todo.id) === -1) {
      saved.push(todo.id)
      todos.push(todo)
    }
  })

})
return todos

1 个答案:

答案 0 :(得分:4)

我相信你混淆了两个相关的概念:immutability - 一种可以在JS vs Immutable.js中使用的技术 - 一个使前者容易使用的库。

以下是两者的示例(数据集有点纠正为有效JS并包含重复的待办事项):

const data = {
  item: {
    name: 'someName',
    todos: [
      { id: 1, name: 'todoName' },
      { id: 2, name: 'todoName2' },
      { id: 2, name: 'todoName2' },
    ],
  },
}


console.info(
  'immutable unique todos:',
  data.item.todos.map((todo) => ({ ...todo, }))
)

console.info(
  'Immutable.js unique todos:',
  Immutable.fromJS(data).getIn(['item', 'todos']).toSet().toJS()
)
<script src="https://cdn.jsdelivr.net/immutable.js/3.8.1/immutable.min.js"></script>

Immutable.js docs