Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Arrays_Object_Formatting - Fatal编程技术网

Javascript 数据格式问题:数组到对象。有简单的方法吗?

Javascript 数据格式问题:数组到对象。有简单的方法吗?,javascript,arrays,object,formatting,Javascript,Arrays,Object,Formatting,我试图将数组格式化为对象。它工作正常,但我需要知道,这是正确的还是错误的?还有其他标准的方法吗 我用下划线来表示这个 //我从API得到了什么 “A/A/1”=A->类别,A->子类别,1->子类别的子类别 ["A", "A/a", "A/b", "A/a/1", "A/a/2", "B", "B/a"]; //我需要哪种格式 [ { "name":"A", "parent":"", "children":[ {

我试图将数组格式化为对象。它工作正常,但我需要知道,这是正确的还是错误的?还有其他标准的方法吗

我用下划线来表示这个

//我从API得到了什么

“A/A/1”=A->类别,A->子类别,1->子类别的子类别

["A", "A/a", "A/b", "A/a/1", "A/a/2", "B", "B/a"];
//我需要哪种格式

[
   {
      "name":"A",
      "parent":"",
      "children":[
         {
            "name":"a",
            "parent":"A",
            "children":[
               {
                  "name":"1",
                  "parent":"a",
                  "children":[

                  ]
               },
               {
                  "name":"2",
                  "parent":"a",
                  "children":[

                  ]
               }
            ]
         },
         {
            "name":"b",
            "parent":"A",
            "children":[

            ]
         }
      ]
   },
   {
      "name":"B",
      "parent":"",
      "children":[
         {
            "name":"a",
            "parent":"B",
            "children":[

            ]
         }
      ]
   }
]
我的代码:

var dataObj = function(){
        this.name = "";
        this.parent = "";
        this.administrator = "";
        this.children = [];
      };


  var d_ = []; 

  _.each(data, function(item, index){

        var row = new dataObj();
        var item_array = item.split("/"),
            item_array_length = item_array.length;

          if(item_array.length  == 1){

            row.name = item_array[0];
            d_.push(row);

          } else {

              row.name = item_array[1];
              row.parent = item_array[0];
              var newC = d_[_.findIndex(d_, {name:item_array[0]})];

            if(item_array.length  == 2) {

              newC.children.push(row);

            } else if(item_array.length  == 3) {


              newC.children[_.findIndex(newC.children, {name: item_array[1]})]
                  .children.push({name : item_array[2], parent : item_array[1]});


            }


          }

  });
更新
子类别的级别不受限制。“A/A/1/i/n/x/y…”

我觉得您的实现可以改进。以下是几种可能性:

  • 为了减少处理时间,API的返回数据结构可以是
    [“A/b”、“A/A/1”、“A/A/2”、“b/A”]
    的形式,而不是
    [“A”、“A/A”、“A/b”、“A/A/1”、“A/A/2”、“b”、“b/A”]
  • \uu
    库似乎帮不了什么忙,代码可以用普通javaScript实现
  • 可以使实现具有足够的通用性,以处理任何级别的嵌套子级。目前的实施仅限于第3级
  • 我能想到的一个简单算法包括以下高级步骤:

  • 让我们将API提供的数据调用为
    sampleArray
  • 对于
    sampleArray
    的每个元素,我们有
    currentSplittedElementArray=sampleArray[i].split('/')
  • 让我们将所需输出调用为
    finalOutput
  • 循环通过
    finalOutput
    并测试元素是否已经存在
    finalOutput[i]。name==currentSplittedElementArray[0]
  • 如果元素已经存在,那么让我们通过
    currentSplittedElementArray
    循环,并使用
    currentSplittedElementArray
    的元素更新
    finalOutput
    的相同元素。(如果元素尚未出现在
    finalOutput
    上,那么让我们首先在
    finalOutput
    上创建元素,并用
    currentSplittedElementArray
    的元素填充它)
  • 我知道上述算法可能会让人望而生畏,概述的步骤将包括在循环中重复调用函数或使用某种递归。但如果我要实现这样的东西,我会这么做


    我对我的方法中的任何改进/优化领域都持开放态度。

    对不起,这背后的逻辑是什么?有什么我们可以申请的吗?它似乎没有一个非常具体的逻辑。@briosheje“a/a/1”=a->Category,a->Subcategory,1->Subcategory的子类。所有级别用“/”分隔。我需要将格式更改为object(我在上面添加了所需的格式)。我可以看到您正在查找的最终输出中的某些节点中缺少“administrator”属性。请澄清这是否是有意的,如果是,那么背后的逻辑应该是什么?并希望了解其他约束和条件,如if 1。API 2的响应中可能存在重复元素。如果嵌套级别最多为三个。这将使我们清楚地知道,解决方案是否应该足够通用,以处理所有这些问题cases@DopedDude不要想管理员。。子类别的级别不受限制。“A/A/1/i/n/x/y…”。不能限制任何级别(但目前我限制了3个级别)。逻辑是我们需要创建一个字符串形式的对象来生成产品的级别。