【问题标题】:Sort a json with nested objects structure and return a format same as the structure of json对具有嵌套对象结构的 json 进行排序,并返回与 json 结构相同的格式
【发布时间】:2022-01-20 21:48:21
【问题描述】:

我对这个问题的标题。可能不合适,但我的问题是我有以下类型的 json...

{
  "trees":{
     "name":"a",
     "age":"9",
     "height":"10",
     "location":"park"
  },
  "cars":{
     "name":"b",
     "age":"3",
     "height":"10",
     "location":"park"
  },
  "bikes":{
     "name":"c",
     "age":"110",
     "height":"10",
     "location":"park"
  }
}

现在我想根据年龄 3,9,110 对其进行排序。并以与

相同的格式获取这些排序数据
{
"cars":{
     "name":"b",
     "age":"3",
     "height":"10",
     "location":"park"
  },
  "trees":{
     "name":"a",
     "age":"9",
     "height":"10",
     "location":"park"
  },
  "bikes":{
     "name":"c",
     "age":"110",
     "height":"10",
     "location":"park"
  }
};

这种格式对我来说很重要,因为我将它进一步传递给另一个 react 子组件,在那里我对其进行了一些操作以将其进一步发送到其他组件。

我在网上搜索并找到了对该数组进行排序的方法,其中首先将初始化一个数组,并且只推送 json 的值而不是该数组中的键,然后进行排序。 该方法工作正常,但我得到的结果数组的类型与我原来的导致麻烦的 json 类型不同,它将数据进一步发送到组件。

【问题讨论】:

  • 为什么不使用数组。这是为损坏的物品制作的。
  • 我正在开发的应用程序有许多组件,其中数据以与给定 json 相同的格式解释,因此我必须将其保持为相同的格式

标签: javascript reactjs json


【解决方案1】:

转换为键值对数组,然后按值的age 属性排序转换为数字,然后从条目数组转换回对象。

Object.fromEntries(
  Object.entries(data).sort(
    ([, objA], [,objB]) => Number(objA.age) - Number(objB.age)
  )
);

const data = {
  "trees": {
    "name": "a",
    "age": "9",
    "height": "10",
    "location": "park"
  },
  "cars": {
    "name": "b",
    "age": "3",
    "height": "10",
    "location": "park"
  },
  "bikes": {
    "name": "c",
    "age": "110",
    "height": "10",
    "location": "park"
  }
}

const sortedData = Object.fromEntries(
  Object.entries(data).sort(([, objA], [,objB]) => Number(objA.age) - Number(objB.age))
);

console.log(sortedData);

【讨论】:

    【解决方案2】:

    var data = {
      "trees":{
         "name":"a",
         "age":9,
         "height":"10",
         "location":"park"
      },
      "cars":{
         "name":"b",
         "age":3,
         "height":"10",
         "location":"park"
      },
      "bikes":{
         "name":"c",
         "age":110,
         "height":"10",
         "location":"park"
      }
    },
        sorted = {};
    
    Object
        .keys(data).sort(function(a, b){
            return data[a].age - data[b].age;
        })
        .forEach(function(key) {
            sorted[key] = data[key];
        });
    
        console.log(sorted);

    【讨论】:

      猜你喜欢
      • 2022-01-08
      • 2019-03-15
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多