繁体   English   中英

如何以有效方式使用es6语法过滤JSON数组对象(如嵌套的Sql Query)

[英]How to filter the JSON array object like nested Sql Query using es6 syntax in effective way

我是ES6语法的新手,请帮助我。

我有一个像这样的JSON数组:

var data = [{
    "recordid": 1,
    "recordidclass": "Parent Class",
    "relatedrecid": 2,
    "relatedrecclass": "Child Class2"   
},
{
    "recordid": 1,
    "recordidclass": "Parent Class",
    "relatedrecid": 3,
    "relatedrecclass": "Child Class3"   
},
{
    "recordid": 9,
    "recordidclass": "Parent Class",
    "relatedrecid": 14,
    "relatedrecclass": "Child Class4"   
},
{
    "recordid": 2,
    "recordidclass": "Parent Class",
    "relatedrecid": 5,
    "relatedrecclass": "Child Class5"   
},
{
    "recordid": 5,
    "recordidclass": "Parent Class",
    "relatedrecid": 6,
    "relatedrecclass": "Child Class6"   
},
{
    "recordid": 3,
    "recordidclass": "Parent Class",
    "relatedrecid": 7,
    "relatedrecclass": "Child Class7"   
},
{
    "recordid": 4,
    "recordidclass": "Parent Class",
    "relatedrecid": 8,
    "relatedrecclass": "Child Class8"   
},{...}]

所有父对象和子对象都在同一数组中。 我想基于recordid过滤数据,我也应该获取所有与recordid及其相关relatedrecid对象匹配的对象。

简而言之,根据示例数据,如果我调用getRequiredData(1) (它是recordid ),那么我也应该获取所有与recordid及其相关的relatedrecid数据匹配的数据。

我的输出应为:

var result = [{
    "recordid": 1,
    "recordidclass": "Parent Class",
    "relatedrecid": 2,
    "relatedrecclass": "Child Class2"   
},
{
    "recordid": 1,
    "recordidclass": "Parent Class",
    "relatedrecid": 3,
    "relatedrecclass": "Child Class3"   
},
{
    "recordid": 2,
    "recordidclass": "Parent Class",
    "relatedrecid": 5,
    "relatedrecclass": "Child Class5"   
},
{
    "recordid": 3,
    "recordidclass": "Parent Class",
    "relatedrecid": 7,
    "relatedrecclass": "Child Class7"   
}]

您可能要在阵列上使用过滤器。 关于此的信息可以在这里找到:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

在哪里执行filteredResults = result.filter(function(item){return item.recordId == paramId});

或老式的for循环永远不会失败。

正如罗曼指出的那样,es6语法使您可以做到这一点:

filteredResults = result.filter(item=>item.recordId == paramId);

它执行完全相同的操作,只是手语法略短:)

使用array.find查找具有匹配ID的记录。 使用array.filter查找与第一个记录有关的记录。

在这里,我将这两个操作的结果合并为一个数组。

 var data = [{ "recordid": 1, "recordidclass": "Parent Class", "relatedrecid": 2, "relatedrecclass": "Child Class2" }, { "recordid": 1, "recordidclass": "Parent Class", "relatedrecid": 3, "relatedrecclass": "Child Class3" }, { "recordid": 9, "recordidclass": "Parent Class", "relatedrecid": 14, "relatedrecclass": "Child Class4" }, { "recordid": 2, "recordidclass": "Parent Class", "relatedrecid": 5, "relatedrecclass": "Child Class5" }, { "recordid": 5, "recordidclass": "Parent Class", "relatedrecid": 6, "relatedrecclass": "Child Class6" }, { "recordid": 3, "recordidclass": "Parent Class", "relatedrecid": 7, "relatedrecclass": "Child Class7" }, { "recordid": 4, "recordidclass": "Parent Class", "relatedrecid": 8, "relatedrecclass": "Child Class8" }]; var someId = 1; var d1 = data.find(e => e.recordid == someId); var d2 = data.filter(e => e.recordid == d1.relatedrecid); d2.unshift(d1); console.log(d2); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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