使用Linq.js比较对象数组的每个成员
Using Linq.js to compare every member of an array of objects?
我正在为内部网格工具构建一个过滤函数,我有点卡在如何使用linq.js与Typescript
我们的网格由一个数据对象组成。这个数据对象有一个名为"rows"的成员,它是一个对象数组。
数组在技术上被分类为"any",但通常它们有一个固定的属性集(必须与网格匹配)。
我需要查询这个数组中的每个字段,如果任何字段匹配过滤器,它们应该被添加到列表中。
结构是这样的
grid
----data
--------rows
------------Row
---------------cell
------------------prop1
------------------prop2
---------------cell
------------------prop1
------------------prop2
---------------cell
------------------prop1
------------------prop2
------------Row
---------------cell
------------------prop1
------------------prop2
---------------cell
------------------prop1
------------------prop2
---------------cell
------------------prop1
------------------prop2
对象的示例可以类似于:
{
"grid":{
"rows":[
{
"row":[
{
"cells":[
{
"fieldName":"test",
"value":"testing1",
"displayText":"testing 1"
},
{
"fieldName":"test 2",
"value":"testing2",
"displayText":"testing 2"
}
]
}
]
},
{
"row":[
{
"cells":[
{
"fieldName":"test",
"value":"testing1",
"displayText":"testing 1"
},
{
"fieldName":"test 2",
"value":"testing2",
"displayText":"testing 2"
}
]
}
]
}
]
}
}
在伪代码中,使用foreach循环,它可能看起来类似于以下内容:
List items = new List();
string comparator = "testing";
foreach(row item in grid.rows) {
foreach(cell c in item.cells) {
foreach(var field in c.fields) {
if(field.value.contains(comparator)
items.add(item);
}
}
}
编辑
下面是一个工作片段。问题是,我永远不会知道Grid类本身内部的行的属性名称是什么。这一切都是由聚合物模板处理的。
private _filterData(filter: string): any {
var filteredRows: Array<any> = new Array();
var rel = this.el;
if (filter != null) {
Enumerable.from(rel.data.rows).forEach(n => {
Enumerable.from(n.cells).forEach(c => {
Object.keys(c).forEach(p => {
if (c[p].indexOf(filter)>=0) {
filteredRows.push(n);
}
});
});
});
}
return filteredRows;
}
这很容易…你不必给出任何细节,但"大纲"取决于你想做什么。您可以获得具有感兴趣字段的行的列表,如下所示:
var result = rows.Where(row => row.Fields.Any(<<function to filter>>));
如果您只需要感兴趣的字段的列表,请使用SelectMany,如下所示: 根据下面的评论和问题编辑: var result = rows.SelectMany(row => row.Fields).Where(<<function to filter>>);
var inessence = rows.SelectMany(row => row.cells)
.SelectMany(cell => cell.fields)
.Where(field => field.value.constains(comparator));
相关文章:
- 正在数组中查找丢失的组成员
- 从JavaScript对象访问数据's数组成员变量
- 根据成员属性从数组中删除元素
- 访问javascript中对象类型的数组成员
- jQuery - 扩展对象,同时确保数组成员的完整性
- 如何避免在 JavaScript 中的数组中出现未定义的成员
- 数组填充外部函数 - 不可访问的成员
- 角度范围变量中的数组只有一个成员
- 乘以数组成员得到一个新数组
- Javascript,数组成员的所有可能总和(最多 4 个)
- 为什么我不能将数组作为成员添加到我的对象中
- 数组的第一个成员
- 柴数组以包含任何成员
- 如何在JavaScript中将数组声明为类的数据成员
- 数组作为类javascript中的数据成员
- 在运行时动态获取javascript中数组成员的名称
- 如何访问成员模板中的数组位置
- Javascript 全局数组访问成员未定义
- 函数/命令存储为javascript中的数组成员
- 学习Javascript:成员数组声明后的逗号