JavaScript按属性值对字典进行排序[重复]
Posted
技术标签:
【中文标题】JavaScript按属性值对字典进行排序[重复]【英文标题】:JavaScript Sort Dictionary by Value of Property [duplicate] 【发布时间】:2016-04-16 07:46:39 【问题描述】:我在 javascript 中有一个字典样式的数组对象,如下所示,我想按属性对其进行排序。这将如何完成?我知道已经回答了类似的问题,但我认为我的结构不同。简单地运行array.sort(compare)
对我不起作用,因为我没有整数作为索引。谢谢!
var myData =
"userOne":
"firstName": "Felix",
,
"userTwo":
"firstName": "Bob",
,
"userThree":
"firstName": "Anna",
我希望上面的数组myData
按firstName
排序,这样带有Anna
的对象首先出现,然后是Bob
,然后是Felix
。非常感谢!!
【问题讨论】:
不存在“字典式数组对象” 你不能——对象没有顺序。 不可能对对象进行排序。请参阅***.com/questions/1069666/…。 你确定myData
不应该是一个数组吗?
好的,我想对我来说最好的办法就是转换我的数据格式。谢谢!
【参考方案1】:
您可以使用可迭代的 ES6 映射:
var myData = new Map();
myData.set('userOne', 'firstName': 'Felix');
myData.set('userTwo', 'firstName': 'Bob');
myData.set('userThree', 'firstName': 'Anna');
function sortByProp(data, prop)
return new Map([...data.entries()].sort((a, b) => a[1][prop] > b[1][prop]));
;
console.log(sortByProp(myData, "firstName"));
【讨论】:
你能解释一下你在这里做什么吗? 当然,1. 创建一个类似于 Object 但也是有序的 ES6 映射(以及更多):developer.mozilla.org/en/docs/Web/JavaScript/Reference/… 2. 将元素插入到映射中。 3. 使用 sortByProp 函数将映射分解为一个数组,按属性名称对其进行排序并构建一个新的排序映射。我相信记录 [...data.entries()] 部分可以帮助您更好地理解它。【参考方案2】:很遗憾,您的数据格式不可能。我们在这里处理 JS 对象。根据定义:
对象是对象类型的成员。 它是一个无序的属性集合,每个属性都包含一个原始值、对象或函数。存储在对象属性中的函数称为方法。
如果你将它设为对象数组,那可能会有所帮助。
【讨论】:
【参考方案3】:这里有一些代码可以解决你的潜在问题,通过创建一个数组而不是一个对象,填充基于键排序的内部对象:
arrayOfSortedObjects = Object.keys(myData).sort(function(a,b)
return myData[a].firstName.localeCompare(myData[b].firstName);
).map(function(k)
return myData[k];
);
【讨论】:
以上是关于JavaScript按属性值对字典进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章