Javascript 如何将以下对象数组解析为以下显示格式
这是输入:Javascript 如何将以下对象数组解析为以下显示格式,javascript,multidimensional-array,Javascript,Multidimensional Array,这是输入: [{ "PSpace": "D1", "Category": "C1", "SubCategory": "S1", "Pname": "P1" }, { "PSpace": "D1", "Category": "C2", "SubCategory": "S2", "Pname": "P2" }, { "PSpace": "D1", "Category": "C2", "SubCategory":
[{
"PSpace": "D1",
"Category": "C1",
"SubCategory": "S1",
"Pname": "P1"
}, {
"PSpace": "D1",
"Category": "C2",
"SubCategory": "S2",
"Pname": "P2"
}, {
"PSpace": "D1",
"Category": "C2",
"SubCategory": "S3",
"Pname": "P6"
}, {
"PSpace": "D2",
"Category": "C6",
"SubCategory": "S7",
"Pname": "P7"
}, {
"PSpace": "D2",
"Category": "C6",
"SubCategory": "S7",
"Pname": "P8"
}]
期望输出
在单个数组中,每个部门应该有一个相关类别数组,每个类别应该有一个相关子类别数组,每个子类别应该有一个相关产品数组
这样我就可以遍历单个数组,并显示附加的产品
最简单的方法是假设所有数据都具有相同的对象签名:
var str = '';
for (var i = 0; i < input.length; i++) {
for (var name in input[i]) {
str += name + ' ' + input[i][name];
}
str += '\n';
}
console.log(str);
您可以使用组更改来检查最后的项,并为对象的给定键使用替换对象 var数据=[{PSpace:D1,类别:C1,子类别:S1,Pname:P1},{PSpace:D1,类别:C2,子类别:S2,Pname:P2},{PSpace:D1,类别:C2,子类别:S3,Pname:P6},{PSpace:D2,类别:C6,子类别:S7,Pname:P7},{PSpace:D2,类别:C6,子类别:S7,Pname:P8}], 名称={PSpace:Space,Category:Category,SubCategory:Sub-Category,Pname:Name}, 结果=data.mapo函数{ var all=false, r=[]; Object.keyso.foreachk函数,i{ 如果我<3{ 如果所有| |这[k]!==o[k]{ r、 pushnames[k]+''+o[k]; 这个[k]=o[k]; 全部=正确; } }否则{ r、 pushnames[k]+''+o[k]; } }这,; 返回r; }, {}; console.logresult;
.as控制台包装{max height:100%!important;top:0;}您需要的是解析该JSON数据。 我写了一个小剧本。你可以在这里找到它: JS代码如下所示:
function stringContains(string, substring)
{
return string.indexOf(substring) !== -1;
}
function parse()
{
document.getElementById("myTextField").value = "";
var jsonData = [{ "PSpace": "D1", "Category": "C1", "SubCategory": "S1", "Pname": "P1" }, { "PSpace": "D1", "Category": "C2", "SubCategory": "S2", "Pname": "P2" }, { "PSpace": "D1", "Category": "C2", "SubCategory": "S3", "Pname": "P6" }, { "PSpace": "D2", "Category": "C6", "SubCategory": "S7", "Pname": "P7" }, { "PSpace": "D2", "Category": "C6", "SubCategory": "S7", "Pname": "P8" }];
for(var obj in jsonData)
{
if(jsonData.hasOwnProperty(obj))
{
for(var prop in jsonData[obj])
{
if(jsonData[obj].hasOwnProperty(prop))
{
var output = prop+" "+jsonData[obj][prop]+"\n";
if(stringContains(prop,"Pname"))
{
output = "Product "+jsonData[obj][prop]+"\n\n";
}
document.getElementById("myTextField").value += output;
}
}
}
}
}
hmtl:
<h1 id="title">Parse JSON</h1>
<textarea id="myTextField" rows="30">click the button</textarea>
<input type="submit" id="byBtn" value="parse" onclick="parse()"/>
这将在文本区域中输出:
PSpace D1
C1类
子类别S1
产品P1
PSpace D1
C2类
子类别S2
产品P2
PSpace D1
C2类
子类别S3
产品P6
PSpace D2
C6类
子类别S7
产品P7
PSpace D2
C6类
子类别S7
产品P8
希望这有帮助。
Ulrich你好,尼娜,我想用Foreach在HTML中显示它,所以是否可以保持这种关系,产品将是每个子类别的下拉列表。什么是Foreach?请在问题中添加想要的风格-以及您尝试过的内容。为什么这会被否决?@FrederickM.Rogers,虽然这是一个很好的主题,但它缺乏解决问题的尝试。顺便说一句,我没有起诉你。@NinaScholz,不是指控你,我只是好奇为什么,合法的还是其他的原因。谢谢。你错过了相同空间、类别和子类别的分组。真的,谢谢尼娜@用户3494996为什么输入有这么多冗余?这是非常糟糕的数据!难道不可能得到正确的JSON字符串吗?我的意思是这个问题应该从根本上解决!