处理复杂的不可变对象

Working with complicated immutable objects

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

假设我的结构与此类似:

// 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

我相信您混淆了两个相关概念:immutability - a technique which can be used in 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.