Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将以下对象数组解析为以下显示格式_Javascript_Multidimensional Array - Fatal编程技术网

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字符串吗?我的意思是这个问题应该从根本上解决!