문제상황
scaffoldEntity
함수를 재사용하기 위한 고차함수인 scaffoldByRowAndCol
에서 문제 발생scaffoldByRowAndCol(entityInfo[1])
의 결과값인 scaffoldDataByRowAndCol
에 scaffoldDataByRowAndCol.s[1].col.push("test")
와 같이 객체의 특정 property에 값을 추가하려 했지만, 모든 property에 값이 추가되는 현상을 확인해결 결과 리터럴로 만든 객체를 전달해줘 모든 프로퍼티가 같은 참조값을 바라봤기 때문
const scaffoldByRowAndCol = (entity) =>
scaffoldEntity(entity, {
row: [],
col: [],
});
const scaffoldEntity = (entities, structure) =>
go(
entities,
Object.entries,
filter(([_, { number }]) => number),
map(([k, v]) => [
v.id,
go(range(v.number), (numbers) =>
numbers.reduce(
(obj, num) => ((obj[`${num + 1}`] = structure), obj),
{},
),
),
]),
(entries) => entries.reduce((obj, [k, v]) => ((obj[k] = v), obj), {}),
);
const scaffoldByRowAndCol = (entity) =>
scaffoldEntity(entity, {
row: [],
col: [],
});
const scaffoldByPosition = (entity) =>
scaffoldEntity(entity, {
position: {
x: 0,
y: 0,
},
size: {
width: 0,
height: 0,
},
});
export default function applySheet() {
const scaffoldDataByRowAndCol = scaffoldByRowAndCol(entityInfo[1]);
scaffoldDataByRowAndCol.s[1].col.push("test"); // 실험을 위해 강제로 push
console.log(JSON.stringify(scaffoldDataByRowAndCol));
}