console.log
inside mapconst lineItemIDs = action.items;.
const newObj = lineItemIDs.map(item => ({
item,
select: true
}));
// console logging
const lineItemIDs = action.items;
const newObj = lineItemIDs.map(item => {
console.log("item", item);
return {
item,
select: true
};
});
some()
신규 컴포넌트 작성 중 기존에 사용하던 API 응답 구조가 변경된 것을 발견했다. 필요한 프로퍼티를 supplierName
으로 가정한다.
// 기존 구조 예시
obj : {
id: ...,
supplierName: ...,
items: [...]
}
// 변경된 구조 예시
obj: {
id: ...,
supplier: {
supplierID: ...,
supplierName: ...
},
items: [...]
}
추후에 또 응답 구조가 바뀌었을 때도 적용할 수 있도록 전체 컴포넌트가 공유하는 api library에서 nested prop을 찾는 재귀 함수를 작성해야 했다. some()
사용법을 익혔다.
// error
function getNestedProp(propName, obj) {
let value = obj[propName];
if (value) {
return value;
} else {
if (isObject(obj)) {
Object.keys(obj).some(key => {
if (isArray(obj[key])) {
return obj[key].some(sub => {
value = getNestedProp(propName, sub);
if (value) {
return value;
}
});
} else if (isObject(obj[key])) {
obj[propName].some(sub => {
value = getNestedProp(propName, sub);
if (value) {
return value;
}
});
}
return false;
});
} else if (isArray(obj)) {
return obj[propName].some(sub => {
value = getNestedProp(propName, sub);
if (value) {
return value;
}
});
}
return value;
}
}
Expected to return a value at the end of arrow function.
eslint(array-callback-return)
처음에 나타난 에러. some
메서드 내부에서 value를 리턴해야 한다. 불필요한 if statement를 제거하여 해결
function getNestedProp(propName, obj) {
let value = obj[propName];
if (value) {
return value;
} else {
if (isObject(obj)) {
Object.keys(obj).some(key => {
if (isArray(obj[key])) {
return obj[key].some(sub => {
value = getNestedProp(propName, sub);
return value;
});
} else if (isObject(obj[key])) {
value = getNestedProp(propName, obj[key]);
return value;
}
return false;
});
} else if (isArray(obj)) {
return obj[propName].some(sub => {
value = getNestedProp(propName, sub);
return value;
});
}
return value;
}
}