2015-09-29 2 views
0

Как удалить один элемент с помощью карты immutablejs. Вот мой код.Удалить элемент с карты immutable.js

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

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

Но это не работает. Пробовал по-разному, но не мог заставить его работать.

+0

'({job: {text: 'a'}}) === ({job: {text: 'a'}}) // false'. Вы должны использовать ссылку на **, что ** объект, который вы хотите удалить, а не другой объект с той же структурой и значениями. – Ginden

+0

@Ginden Я думал, что это будет сделано автоматически immutable.js, нет? –

+0

Как вы видите, это не так. – Ginden

ответ

2

Вы можете использовать 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 
0

Ваш пример утверждает, у вас есть карта, но это выглядит, как ваша карта содержит изменяемые значения данных. Создание карты, как это ..

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'}] } 
Смежные вопросы