Este es mi objeto.
values : { title : 'this is title ..', translate : { en : 'some texts .. ', }, }Y esta es la matriz que tengo.
arr = ['translate.en', 'title'];Lo que quiero hacer es esto, pero esto no funciona como esperaba.
const value = arr.map(item => values[item]); // (Result) value : undefined, 'this is title ..' // (Expected) value : 'some texts .. ', 'this is title ..' const value = arr.map(item => values.item); // error : 'item' is declared but its value is never read. ¿Cómo obtener el valor de values.translate.en usando map() ?
puedes usar este fragmento. No es el más limpio, pero entiendes la idea.
arr.map(item => { let arrItem = item.split('.'); let data = values; for (i in arrItem) { data = data[arrItem[i]]; } return data; });Su código actual está haciendo lo siguiente:
const values = { title: 'this is title ..', translate: { en: 'some texts .. ', }, 'translate.en': 'hello', }; const arr = ['translate.en', 'title']; const value = arr.map((item) => values[item]); // (Result) value : 'hello', 'this is title ..'Si quieres hacer lo que quieres hacer, debes hacer lo siguiente:
const values = { title: 'this is title...', translate: { en: 'some texts... ', }, }; const arr = ['translate.en', 'title']; const value = arr.map((item) => { let index = item.split('.'); let value = values; for (i in index) { value = value[index[i]]; } return value; }); // (Result) value : 'come texts...', 'this is title ..' Sin embargo, si es posible, sugeriría estructurar su objeto de values de la siguiente manera:
const values = { title: { kr: '타이틀', en: 'title' }, body: { en: 'some texts .. ', kr: '어쩌고 저쩌고 .. ', }, }; Entonces, siempre que sepa qué parte: body o title se requiere y sepa el idioma que desea obtener, será fácil obtenerlo.