我有一个像这样的数组:
arr = []
arr[0] = "ab"
arr[1] = "abcdefgh"
arr[2] = "abcd"
排序后,输出数组应为:
arr[0] = "abcdefgh"
arr[1] = "abcd"
arr[2] = "ab"
我的意思是,我想按每个元素长度的降序排列。
我有一个像这样的数组:
arr = []
arr[0] = "ab"
arr[1] = "abcdefgh"
arr[2] = "abcd"
排序后,输出数组应为:
arr[0] = "abcdefgh"
arr[1] = "abcd"
arr[2] = "ab"
我的意思是,我想按每个元素长度的降序排列。
Answers:
您可以使用Array.sort
方法对数组进行排序。将字符串长度作为排序标准的排序函数可以按如下方式使用:
arr.sort(function(a, b){
// ASC -> a.length - b.length
// DESC -> b.length - a.length
return b.length - a.length;
});
注意:["a", "b", "c"]
不能保证按字符串长度排序返回["a", "b", "c"]
。根据规格:
排序不一定是稳定的(也就是说,比较相等的元素不一定保持其原始顺序)。
如果目标是按长度排序,然后按字典顺序排序,则必须指定其他条件:
["c", "a", "b"].sort(function(a, b) {
return a.length - b.length || // sort by length, if equal then
a.localeCompare(b); // sort by dictionary order
});
arr.sort((a, b) => b.length - a.length)
我们可以使用Array.sort方法对该数组进行排序。
var array = ["ab", "abcdefgh", "abcd"];
array.sort(function(a, b){return b.length - a.length});
console.log(JSON.stringify(array, null, '\t'));
对于升序排序:
a.length - b.length
对于降序排序:
b.length - a.length
注意:并非所有浏览器都可以理解ES6代码!
在ES6中,我们可以使用箭头函数表达式。
let array = ["ab", "abcdefgh", "abcd"];
array.sort((a, b) => b.length - a.length);
console.log(JSON.stringify(array, null, '\t'));
这是排序方式,具体取决于您要求的带有javascript的字符串的长度:
[通过气泡排序解决问题] [1]
[1]:http://jsfiddle.net/sssonline2/vcme3/2/enter code here
基于Salman的答案,我编写了一个小函数来封装它:
function sortArrayByLength(arr, ascYN) {
arr.sort(function (a, b) { // sort array by length of text
if (ascYN) return a.length - b.length; // ASC -> a - b
else return b.length - a.length; // DESC -> b - a
});
}
然后用
sortArrayByLength( myArray, true );
请注意,不幸的是,不能/不应该将函数添加到Array原型中,如本页所述。
此外,它修改了作为参数传递的数组,并且不返回任何内容。这将强制复制数组,并且对大型数组而言效果不佳。如果有人有更好的主意,请发表评论!
我修改了@shareef的答案以使其简洁。我用,
.sort(function(arg1, arg2) { return arg1.length - arg2.length })
#created a sorting function to sort by length of elements of list
def sort_len(a):
num = len(a)
d = {}
i = 0
while i<num:
d[i] = len(a[i])
i += 1
b = list(d.values())
b.sort()
c = []
for i in b:
for j in range(num):
if j in list(d.keys()):
if d[j] == i:
c.append(a[j])
d.pop(j)
return c
sort
很简单,您在哪里遇到困难?