Tengo un objeto en una matriz llamada pick y también tengo otro objeto llamado diaryItem.
También quiero extraer solo el objeto cuyo nombre es wormColor del objeto diaryItem.
así que probé mi código pero no funciona
el error dice que v.filter no es una función
¿Cómo puedo arreglar mi código?
const pick = [ { diaryId: 1, diaryItem: { name: 'instar' } }, { diaryId: 2, diaryItem: { name: 'facebook' } }, { diaryId: 1, diaryItem: { name: 'wormColor' } }, ] const wormcolor = pick.map((v) => v.filter((p) => p.name ==="wormColor"))respuesta esperada
wormcolor : [{ diaryId: 2, diaryItem: { name: 'wormColor' } value: "2" }]o
wormcolor : { diaryId: 2, diaryItem: { name: 'wormColor' } value: "2" }Necesita map() cuando desea transformar una matriz en otra de la misma longitud aplicando alguna función. Eso no es apropiado aquí.
Además, mirando su devolución de llamada filter() , está accediendo a .name directamente, en su lugar desea .diaryItem.name :
const pick = [ { diaryId: 1, diaryItem: { name: 'instar' } }, { diaryId: 2, diaryItem: { name: 'facebook' } }, { diaryId: 1, diaryItem: { name: 'wormColor' } } ] const wormcolor = pick.filter((p) => p.diaryItem.name ==="wormColor"); console.log(wormcolor);Podrías probarlo con filtro.
var lookingFor=pick.filter(function (el){ return el.diaryItem.name=='wormColor'; })Si desea cambiar el objeto que obtiene, primero tendría que filtrar y luego mapear, algo como esto:
const pick = [ { diaryId: 1, diaryItem: { name: "instar" }, }, { diaryId: 2, diaryItem: { name: "facebook" }, }, { diaryId: 1, diaryItem: { name: "wormColor" }, }, ]; const wormcolor = pick .filter((item) => item.diaryItem.name === "wormColor") .map((filtered) => { return { ...filtered, value: filtered.diaryId + "", }; }); Lo que obtenga de esto debería verse así: [ { diaryId: 1, diaryItem: { name: 'wormColor' }, value: '1' } ] . Si no desea cambiar el objeto original, simplemente omita la parte .map.