Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.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 从API数据创建对象并将其动态添加到数组_Javascript_Arrays_Reactjs_Foreach_Javascript Objects - Fatal编程技术网

Javascript 从API数据创建对象并将其动态添加到数组

Javascript 从API数据创建对象并将其动态添加到数组,javascript,arrays,reactjs,foreach,javascript-objects,Javascript,Arrays,Reactjs,Foreach,Javascript Objects,我有一个从数据库中提取的数据集。它是一维的,我基本上需要使它更结构化。我称之为“平坦” 我需要显示一个标题,以及该标题下与标题相关的项目 数据以具有和节名(标题)和项目名(项目)以及每个项目特有的其他数据(如下载URL等)的形式出现 项目名称(项目)\章节名称(标题) 第一基金 第二基金 第三个基金 第四种文学 第五种文学 第六文学 第七部文学 第八次双勤 我不知道项目或部分的名称,或者每个部分有多少项目、部分或项目。正如我所说,它非常平坦。这需要是完全动态的,这就是为什么这对我来说是复杂的事情

我有一个从数据库中提取的数据集。它是一维的,我基本上需要使它更结构化。我称之为“平坦”

我需要显示一个标题,以及该标题下与标题相关的项目

数据以具有和节名(标题)和项目名(项目)以及每个项目特有的其他数据(如下载URL等)的形式出现

  • 项目名称(项目)\章节名称(标题)
  • 第一基金
  • 第二基金
  • 第三个基金
  • 第四种文学
  • 第五种文学
  • 第六文学
  • 第七部文学
  • 第八次双勤
  • 我不知道项目或部分的名称,或者每个部分有多少项目、部分或项目。正如我所说,它非常平坦。这需要是完全动态的,这就是为什么这对我来说是复杂的事情

    这就是我所做的

  • 检索数据的API调用。以数组的形式存储状态中的数据(它以对象数组的形式出现)
  • 我创建一个空数组来存储我的新结构化数据
  • 我用foreach循环遍历数据
  • 我为我的新数据创建了一个新对象,以便添加到新数组中,以便以后可以循环使用它
  • 我首先检查以确保数据存在
  • 要创建头文件,我需要检查我的新空数组是否为空,或者我的section_名称是否与上一个不相同。(在从API调用获得的原始数据数组中)
  • 我将节_名称作为对象存储在新数组(newArray.push(newObject))中
  • 现在我需要获取与节名相关的项名,并将它们存储在每个标题名下的对象中,或者至少存储在同一个索引中

     _generateInfo() { 
    
            let dataArray = this.state.stepTwoData
            let newArray =[]
    
            dataArray.forEach(function(item, index) {
                let newObject = {}
                if (index > 0) {
                    if (newArray.length === 0 || item.investor_portal_section_name !== dataArray[index -1].investor_portal_section_name) {
                        newObject["name"] = item.investor_portal_section_name
                        newObject["items"] = []
                        newArray.push(newObject)
                } 
    
            })
            console.log(newArray)
        }
    
    我尝试将项目推送到我的新对象上的“数字”数组,但似乎无法正常工作。有时它会复制我的newObject.name

    检查newObject.name==数组中的节名称,并将其推送到我的新对象中的“number”数组,只会创建新的键值对,因此它仍然不相关

    我尝试在if语句中再次循环,if部分_name===newObject.name然后创建一个newObject并推送它,但它只会重复推送其中一个项,而不是全部推送

    我需要循环并创建一个标题(每个不同的节名有一个标题)。然后将与节名对应的每个项目添加到标题中。如下所示

    [
    {section_name(header): "Funds",
    items: [
     {
      name: item_name,
      sku: item_sku,
      url: item_url
    },
    {
     name: item_name,
     sku: item_sku,
     url: item_url
    }]
    },
    {section_name(header):"Literature",
    items: [
     {name: item_name,
      sku: item_sku,
      url: item_url
    },
    {
     name: item_name,
     sku: item_sku,
     url: item_url
    }]}
    ]
    
    使用关联数组(字典)将数据按类别进行分隔将完成这项工作。 我起草了一些说明这个想法的POC代码。其中的关键元素是
    buildAssociationArray
    函数

    const raw_data = [
        {item_name: "first", section_name: "Funds"}, 
        {item_name: "second", section_name: "Funds"}, 
        {item_name: "third", section_name: "Funds"}, 
        {item_name: "fourth", section_name: "Literature"}, 
        {item_name: "fifth", section_name: "Literature"}, 
        {item_name: "sixth", section_name: "Literature"}, 
        {item_name: "seventh", section_name: "Literature"}, 
        {item_name: "eighth", section_name: "DueDilligence"}, 
    ]
    
    function buildAssociativeArray(data) {
        const dictionary = {};
        for (var i = 0; i < data.length; i++) {
            const item = data[i];
            const section = item.section_name;
            var dictEntry = dictionary[section];
            if (!dictEntry) {
                dictEntry = [];
                dictionary[section] = dictEntry;
            }
            dictEntry.push({
                name: item.item_name,
                //    other fields like sku: item_sku or url: item_url may follow here
            });
        }
        return dictionary;
    }
    
    const dictionary = buildAssociativeArray(raw_data);
    console.log(dictionary);
    /*
    At this point
    dictionary == {
      "Funds": [
        {
          "name": "first"
        },
        {
          "name": "second"
        },
        {
          "name": "third"
        }
      ],
      "Literature": [
        {
          "name": "fourth"
        },
        {
          "name": "fifth"
        },
        {
          "name": "sixth"
        },
        {
          "name": "seventh"
        }
      ],
      "DueDilligence": [
        {
          "name": "eighth"
        }
      ]
    }
    */
    
    //    Associcative array dictionary itself allows to further solve you task using for (var key in dictionary) {...} operator
    //    If however you need to obtain the data structure looking exactly like the one in your question you may go further with following function
    
    function transformAssociativeArray(dictionary) {
        const array = [];
        for (var key in dictionary) {
            const items = dictionary[key];
            const newEntry = {
                section_name: key,
                items: items,
            }
            array.push(newEntry);
        }
        return array;
    }
    
    const array = transformAssociativeArray(dictionary);
    console.log(array);
    /*
    
    At this point
    array == [
      {
        "section_name": "Funds",
        "items": [
          {
            "name": "first"
          },
          {
            "name": "second"
          },
          {
            "name": "third"
          }
        ]
      },
      {
        "section_name": "Literature",
        "items": [
          {
            "name": "fourth"
          },
          {
            "name": "fifth"
          },
          {
            "name": "sixth"
          },
          {
            "name": "seventh"
          }
        ]
      },
      {
        "section_name": "DueDilligence",
        "items": [
          {
            "name": "eighth"
          }
        ]
      }
    ]
    */
    
    const原始数据=[
    {项目名称:“第一”,章节名称:“资金”},
    {项目名称:“第二”,章节名称:“资金”},
    {项目名称:“第三”,章节名称:“资金”},
    {项目名称:“第四”,章节名称:“文学”},
    {项目名称:“第五”,章节名称:“文学”},
    {项目名称:“第六”,章节名称:“文学”},
    {项目名称:“第七”,章节名称:“文学”},
    {项目名称:“第八”,章节名称:“决斗”},
    ]
    函数buildAssociateArray(数据){
    常量字典={};
    对于(变量i=0;i