Lo que estoy tratando de lograr es:
https://codesandbox.io/s/cranky-swirles-gb6ct?file=/src/App.js:410-412 En el ejemplo del código sandbox, he agregado dos objetos, con cadenas de texto vacías y en ese caso esperaría para recuperar una matriz de cadenas (resultado = ['662e4120', '782h7a9x'])
Puedo encontrar valores vacíos, sin embargo, no estoy seguro de cómo devolver el objeto desde el alcance superior.
Si no puede acceder al códigoSandbox, se adjunta un fragmento justo debajo:
const array = [ { id: "5548d3c2", state: { properties: [ { text: "text", key: "fs5a" } ] } }, { id: "662e4120", state: { properties: [ { text: "", key: "m03n" } ] } }, { id: "782h7a9x", state: { properties: [ { text: "", key: "y5x1" } ] } }]; const findItem = () => { return array .map((item) => item.state) .map((item) => item.properties) .flat() .filter((item) => item.text === ""); };Intenta hacer algo como esto https://codesandbox.io/s/jovial-mcnulty-2fwh4
export default function App() { const array = [ { id: "5548d3c2", state: { properties: [ { text: "text", key: "fs5a" } ] } }, { id: "662e4120", state: { properties: [ { text: "", key: "m03n" } ] } }, { id: "782h7a9x", state: { properties: [ { text: "", key: "y5x1" } ] } } ]; const findItem = () => { return array.filter(obj=>obj.state.properties[0].text==="").map(obj=>obj.id) }; console.log(findItem()); return <div className="App"></div>; } Aquí, estamos filtrando la matriz original en función de un predicado que es obj=>obj.state.properties[0].text==="" . Esto básicamente obtiene todos los elementos de la matriz que satisfacen esta función de predicado. Después de esto, solo estamos aplicando el mapa sobre el resultado para obtener los identificadores de los elementos de la matriz que satisfacen esta función de predicado.
Para obtener una matriz con los identificadores de los objetos sin texto, debe cambiar el orden o sus iteraciones.
Al mapear o filtrar, no puede ir solo a uno, sino a tantos niveles de profundidad como desee. Dado que 'propiedades' contiene una matriz y desea el primer elemento, puede acceder a eso con la matriz de índice [0] (con eso, el plano () que hizo es superfluo)
const findItem = () => { return array .filter(item => item.state.properties[0].text === "") // (2) [{…}, {…}] the original items with no text .map(item => item.id) // ['662e4120', '782h7a9x'] };(el código también puede estar incrustado como un fragmento, que se puede ejecutar directamente)
const array = [ { id: "5548d3c2", state: { properties: [ { text: "text", key: "fs5a" } ] } }, { id: "662e4120", state: { properties: [ { text: "", key: "m03n" } ] } }, { id: "782h7a9x", state: { properties: [ { text: "", key: "y5x1" } ] } }]; const findItem = () => { return array .filter(item => item.state.properties[0].text === "") // (2) [{…}, {…}] the original items with no text .map(item => item.id) // ['662e4120', '782h7a9x'] }; console.log(findItem())