Javascript 如何比较json元素并在多维数组中显示匹配的数据?
我有一个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
{
"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;i log(objectArray)代码>既然您使用导入的作为对象,那么您也应该将其初始化为对象:导入的={}
(而不是导入的的=[]
)确实!非常感谢你的帮助!我想问一下,使用此解决方案是否可以获得与我相同的输出?我不知道如何使用selectedObject
重命名objectArray
,并将字段
和类型
上移一级。我已更新了答案以设置名称。但是,为什么要将字段
和类型
提高一个级别?如果它们位于表上某个属性的数组之外,那么它们每次都会覆盖。这是我最初的问题,它会帮助我完成其余的代码。无论如何,我感谢你的支持,再次感谢你对我的帮助。