[
{
"LocalizedNames": {
"EN-US": "Carrot",
"KO-KR": "당근"
},
"UniqueName": "CARROT"
},
{
"LocalizedNames": {
"EN-US": "Carrot Seeds",
"KO-KR": "당근 씨앗"
},
"UniqueName": "CARROT_SEED"
},
{
"LocalizedNames": null,
"UniqueName": "SOMETHING_DIFFERENT"
},
{
"LocalizedNames": {
"EN-US": "Sweet Potato",
"KO-KR": "고구마"
},
"UniqueName": "SWEET_POTATO"
},
...
]
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
위와 같은 배열에서 입력값으로 '당근 씨앗'을 넣었을 때 UniqueName인 CARROT_SEED가 출력되게 하고 싶어서 아래 코드처럼 작성했습니다.
const translate = require("./data/items.json");
var input = '당근 씨앗'
var output = translate.find(t => t.LocalizedNames['KO-KR'] === input).UniqueName;
console.log(output);
위처럼 시도했는데 위에서부터 아래로 검색하는 방식인지 당근 씨앗까지는 출력이 잘 되지만
중간에 LocalizedNames가 없는 object 이후의 항목인 고구마를 입력하면 아래 오류가 발생합니다
TypeError: Cannot read properties of null (reading 'KO-KR')
귀한 곳에 누추한 질문 한번 부탁드리고.. 검색어라도 알려주시면 스택오버플로우 열심히 뒤져보겟읍니다..
아.. 글 쓰면서 생각나서 find array skip null로 검색하니 나오네요..
var output = translate.find(t => t.LocalizedNames && t.LocalizedNames['KO-KR'] === input).UniqueName;
var output = translate.find(t => t.LocalizedNames?.['KO-KR'] === input).UniqueName; 옵셔널 체이닝 써도 될듯
?!?! 감사합니다