【发布时间】: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