javascript - 如何读取不可变列表中的不可变记录?

标签 javascript immutable.js

我可以独立读取不可变列表和不可变记录。但我有一个不可变的记录,它嵌套在不可变的列表中,我无法读取它。

不可变列表:

let listObj = Immutable.List([{a:'0', b:'1'}, {c:'2', d:'3'}])
console.log('listObj', listObj._tail.array[0]); // {a:'0', b:'1'}

不可变记录:

const Person = Immutable.Record({
  name: null
}, 'Person')

let me = Person({ name: 'Steve' })
me.toString() // "Person { "name": "My Name" }"
let myName = me.get('name')
console.log('myName', myName) // "Steve"

不可变列表中的不可变记录:

    let x = Immutable.List([Immutable.Record({
        name: 'Steve'
    })])

    console.log('x', x) // undefined

您能否提供一些指示(如果有的话)来了解如何读取嵌套在不可变列表中的不可变记录?

谢谢!

最佳答案

如果您尝试实际运行代码:

let x = Immutable.List([Immutable.Record({
  name: 'Steve'
})])

console.log('x', x) // Spoiler alert: NOT undefined
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.2/immutable.js"></script>

你会发现它输出了

x List [ function Record(values) {
  ...
} ]

注意到列表中的东西是一个函数吗?那是因为它是 Record.Factory ,实际上并不是一个 Record 本身。您需要像在第二个示例中一样使用它,在第二个示例中创建 Record.Factory,然后使用它来创建 Record:

const Person = Immutable.Record({
  name: null
}, 'Person')

let me = Person({
  name: 'Steve'
})

let x = Immutable.List([me])

console.log(x) // [{"name": "Steve"}]
console.log(x.get(0)) // {"name": "Steve"}
console.log(x.getIn([0, 'name'])) // "Steve"
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.2/immutable.js"></script>

关于javascript - 如何读取不可变列表中的不可变记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49223573/

相关文章:

javascript - Web 方法仅在标记为静态时才有效,否则无效

javascript - 为什么使用 linq2indexedDB 插入 IndexedDB 失败,如何检索错误?

javascript - 检测第三方在线广告中的音频

javascript - 如何在 Redux 中不使用 .toYS() 的情况下将 Immutable js 数据结构转换为用例数组?

javascript - 无法更新 Set 属性

javascript - 服务器端事件 + 客户端事件与 Websocket

javascript - 如何在 Sencha Touch 中的 Google map 上的 svg 上添加触摸并按住事件

javascript - 我应该使用 delete 和 findIndex 还是 filter 从 immutable.js 列表中删除和删除项目?

javascript - Immutable.Js - 在 map 中添加新属性

javascript - 更新 ImmutableJS 列表中的多个条目