1'use strict';23const payload =[4{id:'001',score:100},5{id:'001',score:40},6{id:'100',score:132},7{id:'100',score:482}8];910const state ={11'001':[12{id:'001',score:142},13{id:'001',score:112}14],15'010':[16{id:'010',score:142},17{id:'010',score:112}18]19}2021for(let data of payload){22const id = data.id;23 data =Object.assign({}, data);// シャローコピー2425if(!Object.prototype.hasOwnProperty.call(state, id)){26 state[id]=[data];27}else{28 state[id].push(data);29}30}3132var expectedResults ={33'100':[34{id:'100',score:132},35{id:'100',score:482}36],3738'001':[39{id:'001',score:142},40{id:'001',score:112},41{id:'001',score:100},42{id:'001',score:40}43],4445'010':[46{id:'010',score:142},47{id:'010',score:112}48]49};5051console.log(JSON.stringify(state)===JSON.stringify(expectedResults));// true52console.log(JSON.stringify(state));// {"100":[{"id":"100","score":132},{"id":"100","score":482}],"001":[{"id":"001","score":142},{"id":"001","score":112},{"id":"001","score":100},{"id":"001","score":40}],"010":[{"id":"010","score":142},{"id":"010","score":112}]}
副作用がないというか、参照透過性?のある純粋関数を作りたいのです。
JavaScript
1'use strict';2const payload =[3{id:'001',score:100},4{id:'001',score:40},5{id:'100',score:132},6{id:'100',score:482}7];89const state ={10'001':[11{id:'001',score:142},12{id:'001',score:112}13],14'010':[15{id:'010',score:142},16{id:'010',score:112}17]18};1920var expectedResults ={21'100':[22{id:'100',score:132},23{id:'100',score:482}24],2526'001':[27{id:'001',score:142},28{id:'001',score:112},29{id:'001',score:100},30{id:'001',score:40}31],3233'010':[34{id:'010',score:142},35{id:'010',score:112}36]37};3839functionsample(payload, state){40const hasOwnProperty =Object.prototype.hasOwnProperty;41const results =JSON.parse(JSON.stringify(state));4243for(let data of payload){44const id = data.id;45 data =Object.assign({}, data);4647if(!hasOwnProperty.call(state, id)){48 results[id]=[data];49}else{50 results[id].push(data);51}52}5354return results;55}5657const results =sample(payload, state);5859console.log(JSON.stringify(state)===JSON.stringify(expectedResults));// true60console.log(JSON.stringify(state));// {"100":[{"id":"100","score":132},{"id":"100","score":482}],"001":[{"id":"001","score":142},{"id":"001","score":112},{"id":"001","score":100},{"id":"001","score":40}],"010":[{"id":"010","score":142},{"id":"010","score":112}]}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/08/24 14:09
2017/08/24 14:10
2017/08/24 14:23 編集
2017/08/25 01:19
退会済みユーザー
2017/08/25 01:44