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",

    

我希望上面的数组myDatafirstName排序,这样带有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按属性值对字典进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何按字典中的值对字典列表进行排序? [复制]

按属性值对对象列表进行排序[重复]

按字典的值对字典进行排序

按值对字典进行排序[重复]

按字符串属性值对对象数组进行排序

在 JavaScript 中按值对字典进行排序