【问题标题】:Array/Object Sorting数组/对象排序
【发布时间】:2020-06-07 21:37:00
【问题描述】:

所以有一个 JSON 对象,它有一个包含对象的数组列表,例如带有名称的 AssortmentID 和 AssortmentParentID,带有 AssortmentParentID 000-000-000 的 AssortimentID 是文件夹,带有另一个 AssortmentID 的 AssortmentParentID 的 AssortmentID 是该文件夹的子项。 如何首先输出文件夹,然后是每个文件夹(父)中的子级。 示例:

The HTTP Request:
const url = "\url";
async function getAssortList() {
  const response = await fetch(url);
  const data = response.json();
  const { Assortments } = data;

for (let i = 0; i < Assortments.length; i++) {
  const assortItem = Assortments[i];
  ...(where I'm stuck)...

/////////////////////////////////////

The JSON Response:
Assortments: [
{ 
  "AssortmentID": 123-123-123-123,
  "AssortmentParentID": 000-000-000
  "Name": "I am a parent"
},
{
  "AssortmentID": 111-111-111-111,
  "AssortmentParentID": 123-123-123-123,
  "Name": "I am a kid"
}


【问题讨论】:

  • 1.这根本与 JSON 或 GET 请求无关。你有一个对象数组。那曾经是 JSON 并且从服务器加载是完全不相关的。 2. 您应该使用正确的语法,即值字符串的引号。 3. 明确所需的输出。您想为每个包含子对象数组的对象添加一个children 字段吗? 4.请不要标记垃圾邮件。
  • 首先,我只想输出作为父母的对象,然后点击它们后访问它的孩子。
  • 你看过可用的数组函数了吗?喜欢.filter().find()
  • 是的,我想知道在我的情况下如何使用它们......

标签: javascript arrays json object


【解决方案1】:

也许这会对你有所帮助。

Assortments.reduce((acc, curr) => {
    let parent = curr["AssortmentParentID"];
    if(acc[parent]){
        acc[parent].push(curr)
    }
    else{
        acc[parent] = [curr]
    }
return acc;
}, {})

【讨论】:

    【解决方案2】:

    在javascript中尝试下面的代码

    Assortments.sort(
      function (a, b) {  
        var x = a.AssortmentParentID.toLowerCase();
        var y = b.AssortmentParentID.toLowerCase();
        if (x < y) {return -1;}
        if (x > y) {return 1;}
        return 0;
    })
    

    通过这个你将在AssortmentParentID上排序数组

    【讨论】:

      【解决方案3】:

      有点,自己解决了。还有事情要做。

      const parents = []; // created a new array that I'll push objects into later.
      for (let i = 0; i < Assortments.length; i++) {
        if (Assortments[i].AssortimentParentID == "000-000-000") {
          parents.push(Assortments[i]);
        }
      }
      for (let i = 0; i < parents.length; i++) {
        parents.sort((a, b) => a.Name.localeCompare(b.Name)); // sort them alphabetically
      }
      

      如果有人可以告诉我如何使用过滤器/查找/等来做同样的事情,那就太好了。谢谢!

      更新: 管理对父母进行排序,将它们输出到 DOM 中,代码如下:

      for (let x in parents) {
        parents[x].isFolder === false ? parents.push( parents.splice(x,1)[0] ) : 0;
      }
      let assortItem = parents[i].Name;
      let subnavList = document.createElement("li");
      let subnavLink = document.createElement("a");
      subnavList.classList.add("subnav-list");
      subnavList.appendChild(subnavLink);
      subnavLink.classList.add("subnav-link");
      subnavLink.innerHTML += assortItem;
      item.appendChild(subnavList);
      

      【讨论】:

        猜你喜欢
        • 2012-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-21
        • 2011-08-18
        相关资源
        最近更新 更多