【问题标题】:Delete Element from Map immutable.js从地图 immutable.js 中删除元素
【发布时间】:2015-09-29 14:59:55
【问题描述】:

如何使用 immutablejs 映射删除一个元素。这是我的代码。

const initialState = Map({
            job: [
                {text: 'a'},
                {text: 'b'}
            ]
        });

const newState = initialState.delete({job: [text: 'a']});

但这不起作用。尝试了不同的方法,但无法成功。

【问题讨论】:

  • ({job: {text: 'a'}}) === ({job: {text: 'a'}}) // false。您必须使用对要删除的 那个 对象的引用,而不是具有相同结构和值的不同对象。
  • @Ginden 我以为这会由 immutable.js 自动完成,不是吗?
  • 如您所见,事实并非如此。
  • 使您对一些选项感到困惑-首先使用键删除整个第一个值,然后作用于该值(这破坏了不变性)jsfiddle.net/16xzhnaL/1
  • @LeonardoAlves 是的,我实际上在 Map 构造函数中使用 ES5 过滤器修改了小提琴。也许更接近你所追求的。 jsfiddle.net/16xzhnaL/2 最终即使它能够匹配值,值也将是整个数组,对吧?

标签: javascript immutable.js


【解决方案1】:

您可以使用deleteIn 和属性映射来删除不可计算映射的深层属性。

const initialState = Immutable.fromJS({
            job: [
                {text: 'a'},
                {text: 'b'}
            ]
        })

console.log(initialState.toJS());

const newState = initialState.deleteIn(["job","0"])

console.log(initialState.toJS());
console.log(newState.toJS());

您还可以使用 Lodash _.toPath 方法将点符号中的字符串路径转换为属性路径数组

const path = _.toPath("job[0].text") //["job", "0", "text"]
const value = initialState.getIn(path) //a

【讨论】:

    【解决方案2】:

    您的示例表明您有一个地图,但看起来您的地图包含可变数据值。像这样创建地图..

    import Immutable from 'immutable'
    
    const initialState = Immutable.Map({
      job: [
        {text: 'a'},
        {text: 'b'}
      ]
    })
    

    将产生如下所示的数据结构...

    Map {
      job: [
        {text: 'a'},
        {text: 'b'}
      ]
    })
    

    其中job 是一个数组,而数组实体是对象。

    如果这确实是您想要的数据结构,您可以尝试使用能够处理混合数据类型的mudash

    import Immutable from 'immutable'
    import _ from 'mudash'
    const initialState = Immutable.Map({
      job: [
        {text: 'a'},
        {text: 'b'}
      ]
    })
    const newState = _.delete(initialState, 'job[0]')   // Map { job: [{text: 'b'}] }
    

    【讨论】:

      猜你喜欢
      • 2021-04-30
      • 2019-09-05
      • 2015-07-03
      • 2013-09-07
      • 2020-05-27
      • 2014-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多