2016-10-28 8 views
0

私は不変のままにしたい多次元の配列を持っています。しかし、私は多次元の不変オブジェクトをどのように扱うことになっているのかまだよく分かりません。複雑な不変のオブジェクトを扱う

// data 
{ 
    // item 
    { 
     name: someName, 
     todos: [ 
      { id: 1, name: todoName }, 
      { id: 2, name: todoName2 } 
     ] 
    } 
} 

どのように私はドスのユニークなリストを抽出することができます。

は、私はこの1と同様の構造を持っていると言うことができますか?

// Saving todos 
let uniqueTodos = [] 
// Saving ids of todos 
let saved = [] 

// I want to make data immutable list 
data.forEach(item => { 
    item.todos.forEach(todo => { 
    if (saved.indexOf(todo.id) === -1) { 
     saved.push(todo.id) 
     todos.push(todo) 
    } 
    }) 

}) 
return todos 
+0

私は私の質問を編集しました。 – Michal

+1

フィルタプロトタイプメソッドを使用して見てくださいhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter 一意のオブジェクトを扱う際には、名前。 To Doを配列に追加する前に、その名前が既に存在するかどうかを本当に素早く確認するだけですか?それは最適ではありませんが、うまくいくでしょう。速度が必要な場合は、todosを格納するために別のデータ構造を検討してください。 –

答えて

3

私はあなたが2つの関連する概念混乱していると信じて:immutabilityからImmutable.js対JSで使用することができる技術 - 前者は容易にするライブラリを。ここで

は(データセットが有効なJSにビットを補正され、重複したTODOを含める)の両方の例を示します

const data = { 
 
    item: { 
 
    name: 'someName', 
 
    todos: [ 
 
     { id: 1, name: 'todoName' }, 
 
     { id: 2, name: 'todoName2' }, 
 
     { id: 2, name: 'todoName2' }, 
 
    ], 
 
    }, 
 
} 
 

 

 
console.info(
 
    'immutable unique todos:', 
 
    data.item.todos.map((todo) => ({ ...todo, })) 
 
) 
 

 
console.info(
 
    'Immutable.js unique todos:', 
 
    Immutable.fromJS(data).getIn(['item', 'todos']).toSet().toJS() 
 
)
<script src="https://cdn.jsdelivr.net/immutable.js/3.8.1/immutable.min.js"></script>

Immutable.js docs

関連する問題