关键是我有这个对象数组。
(5) [{…}, {…}, {…}, {…}, {…}] 0: {id: 143, nombre: "1"} 1: {id: 208, nombre: "10"} 2: {id: 209, nombre: "Madrid"} 3: {id: 144, nombre: "Lugo"} 4: {id: 145, nombre: "3"} 5: {id: 152, nombre: "4"}
我需要按属性排序,名称可以是字母或数字。
尝试以下示例:
users.sort(function (a, b){
return ( b.nombre.toLowerCase().localeCompare(a.nombre.toLowerCase()))
});
但它没有正确执行,结果应该如下:
(5) [{…}, {…}, {…}, {…}, {…}] 0: {id: 143, nombre: "1"} 1: {id: 208, nombre: "3"} 2: {id: 209, nombre: "4"} 3: {id: 144, nombre: "10"} 4: {id: 145, nombre: "Lugo"} 5: {id: 152, nombre: "Madrid"}
有任何想法吗?
谢谢
您可以像以前一样将 sort() 方法与 localeCompare() 一起使用,但您必须指出您也可以比较数字。您可以使用该方法提供的选项对象来执行此操作,并且您还必须设置语言环境,因为 localeCompare() 提供的结果因语言而异。
你好吗?
我根据对您问题的宝贵意见提出以下解决方案,正如@davidbug 建议的那样,它可以通过以下方式实现:
flatMap
:返回数组的扁平化版本。match con regex:
获取正则表达式的出现次数。sort
: 返回一个有序数组。filter
:创建一个包含所有满足条件的元素的新数组。spreat:
允许扩展可迭代元素(此解决方案的串联)。NUMBERS: flatMap 使用所需的键(在本例中为名称)获取值,并返回仅包含数字(字符串中的数字)的扁平数组,条件为
match()
. 接下来,过滤器“移除”空值(文本),最后使用排序升序对数组进行排序。STRING:应用相同的方法,不同之处在于 match() 仅返回字母(字符串中的字母),而 sort
localCompare()
在其对象中有重音标记的情况下使用。最后 speat 运算符通过连接 NUMS 和 STRING 返回一个新数组
我希望贡献,你好!