Javascript 如何比较json元素并在多维数组中显示匹配的数据?

Javascript 如何比较json元素并在多维数组中显示匹配的数据?,javascript,jquery,arrays,json,multidimensional-array,Javascript,Jquery,Arrays,Json,Multidimensional Array,我有一个JSON对象,如下所示: { "Fields": [ { "table": "catalogue", "field": "Histo_Qtite", "type": "STRING" }, { "table": "catalogue", "field": "id_article", "type": "STRING" }, { "table": "cont

我有一个JSON对象,如下所示:

{
      "Fields": [
    {
      "table": "catalogue",
      "field": "Histo_Qtite",
      "type": "STRING"
    },
    {
      "table": "catalogue",
      "field": "id_article",
      "type": "STRING"
    },
    {
      "table": "contact",
      "field": "contact_email",
      "type": "STRING"
    },
    {
      "table": "contact",
      "field": "contact_firestname",
      "type": "STRING"
    },
    {
      "table": "customer",
      "field": "activity_type",
      "type": "STRING"
    },
    {
      "table": "customer",
      "field": "adress",
      "type": "STRING"
    }
  ],
  "Tables": [
    {
      "entity": "CATALOGUE",
      "table": "catalogue"
    },
    {
      "entity": "CLIENT",
      "table": "customer"
    },
    {
      "entity": "CONTACT",
      "table": "contact"
    }
  ]
}
我试图根据表名为每个“字段”对象创建多维数组。为此,我对javascript进行了实验,结果得到了以下代码:

var objectPREFIX = "object_",
selectedObject = '',
objectArray = [],
objectImport = [],
OFImport = [],
TablesLength = jsonImport.Tables.length,
FieldsLength = jsonImport.Fields.length;

 for (i = 0; i < FieldsLength; i++) {

    selectedObject = objectPREFIX + jsonImport.Fields[i].table;

    OFImport[selectedObject] = {
        tableName : jsonImport.Fields[i].table,
        FieldName : jsonImport.Fields[i].field,
        fieldType : jsonImport.Fields[i].type
    }

    for (j = 0; j < TablesLength; j++) {

        if(OFImport[selectedObject].tableName == jsonImport.Tables[j].table) {

            objectImport.push(OFImport[selectedObject]);
            objectArray[selectedObject] = OFImport[selectedObject];
        }
    }
}

console.log(objectArray);
var objectPREFIX=“object”,
selectedObject='',
objectArray=[],
objectImport=[],
OFImport=[],
tableLength=jsonImport.Tables.length,
FieldsLength=jsonImport.Fields.length;
对于(i=0;i
据我所知,问题在于导入[selectedObject]
包含“Fields”的每个对象迭代,并且只在控制台中显示最后一个对象

我想知道如何在“字段”和“表”之间设置一个比较条件,以便在单独的数组中获得每个迭代


这里有一个例子来说明这个问题(如果我在解释上有困难,我很抱歉)。

如果我理解了你想要做的事情,那就是有一个表数组,有一个字段数组,那么我认为你的
for
循环是向后的

您需要先循环表,然后添加字段,如下所示:-

jsonImport={
“字段”:[{
“表格”:“目录”,
“现场”:“历史现场”,
“类型”:“字符串”
}, {
“表格”:“目录”,
“字段”:“id_文章”,
“类型”:“字符串”
}, {
“表格”:“联系人”,
“字段”:“联系电子邮件”,
“类型”:“字符串”
}, {
“表格”:“联系人”,
“字段”:“联系人姓名”,
“类型”:“字符串”
}, {
“表”:“客户”,
“字段”:“活动类型”,
“类型”:“字符串”
}, {
“表”:“客户”,
“字段”:“地址”,
“类型”:“字符串”
}],
“表格”:[{
“实体”:“目录”,
“表”:“目录”
}, {
“实体”:“客户”,
“表”:“客户”
}, {
“实体”:“联系人”,
“表”:“联系人”
}]
}
var objectArray=[],
objectPREFIX=“object\uux”,
selectedObject='',
tableLength=jsonImport.Tables.length,
FieldsLength=jsonImport.Fields.length;
对于(i=0;ilog(objectArray)既然您使用导入的
作为对象,那么您也应该将其初始化为对象:
导入的={}
(而不是导入的
的=[]
)确实!非常感谢你的帮助!我想问一下,使用此解决方案是否可以获得与我相同的输出?我不知道如何使用
selectedObject
重命名
objectArray
,并将
字段
类型
上移一级。我已更新了答案以设置名称。但是,为什么要将
字段
类型
提高一个级别?如果它们位于表上某个属性的数组之外,那么它们每次都会覆盖。这是我最初的问题,它会帮助我完成其余的代码。无论如何,我感谢你的支持,再次感谢你对我的帮助。