【问题标题】:JavaScript Sort Dictionary by Value of Property [duplicate]JavaScript按属性值对字典进行排序[重复]
【发布时间】: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。非常感谢!!

【问题讨论】:

  • 不存在“字典式数组对象
  • 你不能——对象没有顺序。
  • 不可能对对象进行排序。请参阅stackoverflow.com/questions/1069666/…
  • 你确定myData 不应该是一个数组吗?
  • 好的,我想对我来说最好的办法就是转换我的数据格式。谢谢!

标签: javascript arrays node.js sorting dictionary


【解决方案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];
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-19
      • 2019-01-25
      • 2014-08-25
      • 1970-01-01
      • 2012-04-20
      • 2012-05-18
      • 2014-10-19
      相关资源
      最近更新 更多