【问题标题】:Sort Javascript Object by Value [best practices?] [duplicate]按值排序Javascript对象[最佳实践?] [重复]
【发布时间】:2018-05-26 18:35:48
【问题描述】:

由于没有按值对对象进行排序的官方方法,我猜你要么 (1) 使用数组,要么 (2) 使用 Object.entries() 将对象转换为数组,对其进行排序,然后转换回一个东西。但是选项 (2) 在技术上是不安全的,因为 Javascript 对象不应该有顺序。

现在我有一个使用 Redux 的 React 应用程序。我不是将数据存储为数组,而是存储为由 id 值迭代的对象。这就是 Redux 的建议,无论如何我都会这样做,因为查找时间。我想对这个 redux 数据进行排序,所以我目前正在做的是转换为数组然后返回对象的选项(2)。我不太喜欢。

我的问题是:其他人都是这样做的吗?对对象进行排序是否安全?

例子:

const sortObject = (obj) => {
  //return sorted object
}

var foo = {a: 234, b: 12, c: 130}
sortObject(foo) // {b: 12, c:130, a:234}

这就是我目前正在做的事情。

我的对象数据结构看起来像这样

obj = {
  asjsd8jsadf: {
    timestamp: 1234432832
  },
  nsduf8h3u29sjd: {
    timestamp: 239084294
  }
}

这就是我的排序方式

const sortObj = obj => {
  const objArray = Object.entries(obj);
  objArray.sort((a, b) => {
    return a[1].timestamp < b[1].timestamp ? 1 : -1;
  });
  const objSorted = {};
  objArray.forEach(key => {
    objSorted[key[0]] = key[1];
  });
  return objSorted;
};

【问题讨论】:

  • Array.sort(comparatorCallback) 会是一种方便的方式
  • 不清楚你的代码在做什么,从描述来看,我觉得不对
  • 我看不到您遇到问题的代码,因此不确定您的期望。您对代码的描述听起来像是您做错了什么,但要确定这一点并不容易,因为您没有发布任何代码,但您想知道这是否是“最佳实践”
  • ordersArray 未定义...所以...
  • @Tigger 这个问题是关于对象数组的。我很好奇对对象本身进行排序而不转换为数组并且不使用类似 lodash

标签: javascript arrays reactjs sorting redux


【解决方案1】:

如果您使用 Redux 文档作为参考,您还应该有一个包含所有 id 的数组。对数组进行排序,然后在向状态添加内容时使用插入排序不是更容易吗?那么你可以使用排序后的数组来访问状态的 byId 属性吗?

【讨论】:

    猜你喜欢
    • 2014-05-27
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    相关资源
    最近更新 更多