Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 2x 2x 3x 3x 3x 3x 2x 1x 3x 1x 2x 2x 1x 1x 1x 2x | import {cloneDeep} from 'lodash'; import {ITicker} from '../interfaces'; const updateSocketData = ( originalData: ITicker[], newData: ITicker[], ): ITicker[] => { try { const copyOriginal = cloneDeep(originalData); const copyNew = cloneDeep(newData); if (!copyOriginal.length || !copyNew.length) { return copyOriginal || copyNew; } const copyOriginalIndexed = copyOriginal.reduce( (acc, curr) => ({...acc, [curr.code]: curr}), // curr을 통해 copyOriginal 원소의 reference를 넘김 {} as {[key: string]: ITicker}, ); copyNew.forEach(ele => { const target = copyOriginalIndexed[ele.code]; if (target) { Object.assign(target, ele); // copyOriginal 원소의 reference인 target을 Object.assign하여 덮어씌움으로 copyOriginal까지 변경 } else { copyOriginal.push(ele); } }); return copyOriginal; } catch (error) { console.error(error); return originalData; } }; export default updateSocketData; |