2016-01-29 4 views
1

Документы для immutable.js действительно отсутствуют примеры. Может кто-нибудь объяснить, как я могу выполнить такую ​​вещь в ImmutableJS:Обновление одного ключа в списке карт с использованием ImmutableJS

function isOdd (v) { 
    return v % 2 === 0 
} 

var collection = [{a: 1, b: 2}, {a: 3, b: 7}, {a: 5, b: 6}]; 
collection.map(item => { 
if (isOdd(item.b)) { 
    item.a = item.a * 2; 
} 
return item; 
}) 

Спасибо, и извините за мой плохой английский

ответ

1
const collection = Immutable.fromJS([{a: 1, b: 2}, {a: 3, b: 7}, {a: 5, b: 6}]); 

const isOdd = a => b => b % 2 ? a : a * 2; 

collection 
    .map(item => item 
     .update('a', a => isOdd(a)(item.get('b')))) 

Проверьте выход консоли этого пера: http://codepen.io/anon/pen/Nxzdwe?editors=1012

+0

Практически, но нет. Он вернет только массив измененных значений, но я хочу целую коллекцию. Этот ответ дал мне несколько идей с .map –

+0

Не понял, что это было то, что вы хотели, обновили мое предложение. См. Обновленный код –

0

Так вот моя версия:

const collection = Immutable.fromJS([{a: 1, b: 2}, {a: 3, b: 7}, {a: 5, b: 6}]); 
 

 
console.log(
 
    collection  
 
    .map(item => { 
 
     if (item.get('b') % 2 == 0) { 
 
     return item.set('a', item.get('a') * 2) 
 
     } else { 
 
     return item; 
 
     } 
 
    }).toJS() 
 
);