【问题标题】:JavaScript sort a dictionary arrayJavaScript 对字典数组进行排序
【发布时间】:2020-05-30 12:48:56
【问题描述】:

我有一个关于排序字典对象的问题是 JS es6。我正在尝试过滤数组,但仍将数组的结构保留在每个月的对象中。这是数据的模拟:

"soldListings": {
    "Jan - 2020": [
        {
            "id": 159,
            "user_id": 1,
            "type_id": 1,
        },
        {
            "id": 173,
            "user_id": 1,
            "type_id": 1,
        },
        {
            "id": 563,
            "user_id": 1,
            "type_id": 2,
        }
    ],
    "Dec - 2019": [
        {
            "id": 183,
            "user_id": 1,
            "type_id": 1,
        }
    ],
    "Oct - 2019": [
        {
            "id": 176,
            "user_id": 1,
            "type_id": 1,
        }
    ]
}

如果它是一个平面对象数组,我会这样做:

typeFilter = data.filter((listing) => {
            if(listing.type_id){
                return listing.type_id == this.state.soldListTypeFilter ;    
            }
        });

更新

我需要输出与输入的格式相同。例如,如果我通过 type_id = 2 过滤对象,它将返回:

"soldListings": {
"Jan - 2020": [
    {
        "id": 563,
        "user_id": 1,
        "type_id": 2,
    }
],
"Dec - 2019": [

],
"Oct - 2019": [

]

}

【问题讨论】:

  • 排序后的预期输出是什么?
  • 您是否要对数据进行排序或过滤?您希望生成的数据是什么样的?请记住,对象/字典没有顺序,不能“排序”。
  • This 可能会有所帮助。
  • 欢迎使用 Javascript,我们将字典称为“对象”,它是为 JavaScriptObjectNotation 对象排序的。
  • @VirxEC JSON 对象不是一个东西。 JavaScript 对象是对象,JSON 是 JavaScript 对象的字符串表示。

标签: javascript arrays sorting ecmascript-6 filtering


【解决方案1】:

使用keySort 函数解决这个问题,用于非整数键 阅读https://stackoverflow.com/a/23202095/7146552

keySort(object, sortfn?)

function keySort(obj, sort) {
  var keys = Object.keys(obj);
  keys = keys.sort(sort);
  var sortedObject = {};
  for (var i = 0; i < keys.length; i++) {
    sortedObject[keys[i]] = obj[keys[i]]
  }
  return sortedObject;
}

// Using
var obj = {
  "z:": "Zvalue",
  "a": "AValue"
};
console.log(obj);
obj = keySort(obj);
// or
obj = keySort(obj, (a, b) => {
  return a > b ? 1 : -1
});
console.log(obj)

关于你的问题测试

function keySort(obj, sort) {
  var keys = Object.keys(obj);
  keys = keys.sort(sort);
  var sortedObject = {};
  for (var i = 0; i < keys.length; i++) {
    sortedObject[keys[i]] = obj[keys[i]]
  }
  return sortedObject;
}
data = {
  "Jan - 2020": [{
      "id": 159,
      "user_id": 1,
      "type_id": 1,
    },
    {
      "id": 173,
      "user_id": 1,
      "type_id": 1,
    },
    {
      "id": 563,
      "user_id": 1,
      "type_id": 2,
    }
  ],
  "Dec - 2019": [{
    "id": 183,
    "user_id": 1,
    "type_id": 1,
  }],
  "Oct - 2019": [{
    "id": 176,
    "user_id": 1,
    "type_id": 1,
  }]
}

data = keySort(data,function(a,b){
  adate = new Date(a);
  bdate = new Date(b);
  return adate>bdate ? 1 : -1;
})
console.log(data);

【讨论】:

  • 当你遍历它时,不是不能保证对象会处于“排序”的顺序吗?最好只保留已排序的 Object.keys(obj),并在您想确保正确顺序时对其进行循环。
  • 是的,但如果键是非整数,则运行正确。 stackoverflow.com/a/23202095/7146552
猜你喜欢
  • 1970-01-01
  • 2020-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多