繁体   English   中英

如何根据内部 object 列条件过滤 arrays 的 object

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM