[英]how to filter object of arrays based on inner object column condition
我有以下 object 并且我只想获取第一行是 Number (rowNumber: 1) 的行 标准是“columnId”: 8505590182897540的值应该等于Open并且“columnId”: 7009559238731652应该有它的值不存在。
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"
}
]
}
]
}
我可以使用以下代码遍历行并根据 cell.value = Open" 进行过滤并将结果添加到列表中,但是如果 value = ="Open" 和 columnid '7009559238731652',其中 value 为空白并将该行 id 添加到列表中?
这是我到目前为止的代码
var emptyArray = [];
output.rows.map(function (row) {
row.cells.forEach(function (cell) {
if (cell.value == 'Open') {
emptyArray.push(row.id);
}
})
});
您可以为单元格对象定义过滤器并检查所有过滤器。
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);
Map行,在 map lambda 内过滤所需的单元格。 就像是:
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; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.