2017-02-13 13 views
1

У меня есть несколько сложное состояние следующим образом:ImmutableJS: Upating объект внутри массива массивов

array: 
    array: 
    object, 
    object, 
    etc... 
    array: 
    etc... 

Проще говоря, массив, содержащий ряд массивов, которые содержат объекты. Я пытаюсь найти один из этих объектов внутри этого беспорядка в соответствии с его идентификатором и обновить его (а именно, установить завершенное значение в true), но пока не удалось. Использование Mudash, мне удалось найти этот объект, но я понятия не имею, как передать его снова, чтобы вернуть его, мой код не выглядит следующим образом:

return state.update('data', (arr) => { 
    _.forEach(arr, function(item) { 
     _.forEach(item, function(elt) { 
     if(elt.Id == action.Id) { 
      console.log('Item Found'); 
      elt.set('completed', true); 
     } 

     }); 
    }); 
    return arr; 
    }); 

Есть некоторые простой способ для достижения этой цели? Спасибо.

ответ

1

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

Простое использование метода _.map будет делать трюк ...

const _ = require('mudash') 

return _.update(state, 'data', (arr) => { 
    return _.map(arr, function(item) { 
    return _.map(item, function(elt) { 
     if(_.get(elt, 'Id') == action.Id) { 
     console.log('Item Found'); 
     return _.set(elt, 'completed', true); 
     } 
     return elt; 
    }); 
    }); 
}); 
+1

Это элегантное решение. Спасибо :) – Unforgiven

1

Если вы спрашиваете, как мутировать часть неизменяемого объекта, тогда не будет ответа, который удовлетворит вас. Смотрите этот ответ гораздо более подробно: