Tengo el siguiente objeto y solo quiero obtener la primera fila que es una fila con Número (rowNumber: 1) El criterio es que "columnId": 8505590182897540 debe tener su valor igual a Open y "columnId": 7009559238731652 debe tener su valor no existe.
output = { "rows": [ { "id": 1844195940165508, "rowNumber": 1, "cells": [ { "columnId": 8505590182897540, "value": "Open", "displayValue": "Open" }, { "columnId": 7009559238731699, "value": "Steep", "displayValue": "Steep" }, { "columnId": 7009559238731652 } ] }, { "id": 1844195940165509, "rowNumber": 2, "cells": [ { "columnId": 8505590182897540, "value": "Open", "displayValue": "Open" }, { "columnId": 7009559238731699, "value": "Steep", "displayValue": "Steep" }, { "columnId": 7009559238731652, "value": "Field has value", "displayValue": "Field has value" } ] } ] }Puedo recorrer las filas con el siguiente código y filtrar según el valor de celda = Abrir" y agregar el resultado a una lista, pero ¿cómo puedo verificar cada celda según el ID de columna '8505590182897540' si el valor = ="Abrir" y el ID de columna '7009559238731652' donde el valor está en blanco y agregar ese ID de fila a la lista?
este es el código que tengo hasta ahora
var emptyArray = []; output.rows.map(function (row) { row.cells.forEach(function (cell) { if (cell.value == 'Open') { emptyArray.push(row.id); } }) });Puede definir filtros para objetos de celda y verificar todos los filtros.
const data = [{ id: 1844195940165508, rowNumber: 1, cells: [{ columnId: 8505590182897540, value: "Open", displayValue: "Open" }, { columnId: 7009559238731699, value: "Steep", displayValue: "Steep" }, { columnId: 7009559238731652 }] }, { id: 1844195940165509, rowNumber: 2, cells: [{ columnId: 8505590182897540, value: "Open", displayValue: "Open" }, { columnId: 7009559238731699, value: "Steep", displayValue: "Steep" }, { columnId: 7009559238731652, value: "Field has value", displayValue: "Field has value" }] }], filters = [ { columnId: 8505590182897540, value: 'Open' }, { columnId: 7009559238731652, value: undefined } ], result = data.filter(({ cells }) => filters.every(f => cells.some(c => c.columnId === f.columnId && c.value === f.value ))); console.log(result);Asigne las filas, dentro del mapa lambda filtre las celdas deseadas. Algo como:
const filterCells = v => v.columnId === 8505590182897540 && v.value === `Open` || v.columnId === 7009559238731652 && !v.value; const filtered = values().rows.map(v => ( {id: v.id, cellsFound: v.cells.filter(filterCells)} )); console.log(`if you only need ids: ${filtered.map(v => v.id)}`); console.log(filtered); function values() { return { "rows": [{ "id": 1844195940165508, "rowNumber": 1, "cells": [{ "columnId": 8505590182897540, "value": "Open", "displayValue": "Open" }, { "columnId": 7009559238731699, "value": "Steep", "displayValue": "Steep" }, { "columnId": 7009559238731652 } ] }, { "id": 1844195940165509, "rowNumber": 2, "cells": [{ "columnId": 8505590182897540, "value": "Open", "displayValue": "Open" }, { "columnId": 7009559238731699, "value": "Steep", "displayValue": "Steep" }, { "columnId": 7009559238731652, "value": "Field has value", "displayValue": "Field has value" } ] } ] }; } .as-console-wrapper { max-height: 100% !important; }