首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么immutable.Set.get(x)不像immutable.List.get(x)那样工作?

为什么immutable.Set.get(x)不像immutable.List.get(x)那样工作?
EN

Stack Overflow用户
提问于 2019-06-28 13:52:18
回答 2查看 266关注 0票数 0

我开始使用immutable.js,并且不明白为什么get方法的集合不显示与从列表中获取方法相同的结果

代码语言:javascript
复制
import { fromJS, List, Map, Set } from 'immutable';

const things = fromJS(
  [
    {
      id: 9,
      nome: 'nove'
    },
    {
      id: 7,
      nome: 'sete'
    },
    {
      id: 8,
      nome: 'oito'
    },
    {
      id: 8,
      nome: 'oito'
    }
  ]
).toSet();

const moreThings = fromJS(
  [
    {
      id: 9,
      nome: 'nove'
    },
    {
      id: 6,
      nome: 'seis'
    }
  ]
).toSet();

const anotherThing = Map(
  {
    id: 4,
    nome: 'quatro'
  }
);

const allThingsSorted = things
    .union(moreThings)
    .add(anotherThing)
    .sortBy(thing => thing.get('id'));

console.log(allThingsSorted); // [Object, Object, Object, Object, Object]
console.log(allThingsSorted.get(1)); // undefined
console.log(allThingsSorted.toList().get(1)); // {id: 6, nome: "seis"}

我期望第二个日志undefined与第三个日志{id: 6, nome: "seis"}相等。我应该怎么做才能得到预期的结果,而不是转换成列表呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-02 06:18:48

一张清单就像一个书架,你把书放在另一个书架上。每本书都是按(有时是随机的)顺序排列的,可以通过其位置(索引)来引用。你可以说“我想从左边读第二本书”。

另一方面,一套书是一个装满各种书籍的盒子。这是一种混乱的存储,书中没有位置/索引(!)。您可以选中包含特定书籍的方框,但不能说明书的确切位置。一本书的关键在于书本身!只有当你已经引用了这本书时,你才能调用它的get,使这个方法变得完全无用。

这个概念对于一般的集合是有效的,而不仅仅是不变的。JavaScript本机集甚至没有get,它只有一个has方法。不可变集上有所有这些方法,因为它在所有集合类型上都使用了Collection接口。并不是所有这些方法都有意义。此外,文档中的描述有时可能会产生误导,因为它通常是从父类派生出来的。

当您只需要检查您的列表是否包含一个对象时,集合是非常有用的。另一方面,列表是用于当您需要一个有序的集合,并且需要能够通过它的索引获得一个对象。不可变的集合类型可以很容易地转换为其他集合类型。当您将一组集合与一个列表合并时,您已经知道了这一点。注意,allThingsSorted = things.union(moreThings)会产生一个集合,因为调用union的对象定义了类型。

如果需要一组索引,请使用OrderedSet!您可以在上面调用toIndexedSeq()以获得一个可迭代列表,在该列表中可以按索引进行get

票数 1
EN

Stack Overflow用户

发布于 2019-06-28 13:59:42

List.get get是一个元素,其索引位于列表中,因此.get(1)返回第二个元素(排序后带有id:6的元素)。

Set.get将通过其id获得一个元素,因此.get(1)将查找一个id:1的元素,但它找不到

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56808231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档