我有一个这样的数组:
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"
我希望按照每个元素的长度以 降序
的方式排序。
您可以使用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)
,它会按照元素长度从大到小进行排序。 - Fergal我们可以使用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,您可以这样做:
降序排列
const arr = [
"ab",
"abcdefgh",
"abcd",
"abcdefghijklm"
];
arr.sort((a, b) => b.length - a.length);
console.log(JSON.stringify(arr, null, 2));
升序排序 - 只需将a
与b
相互替换
const arr = [
"ab",
"abcdefgh",
"abcd",
"abcdefghijklm"
];
arr.sort((a, b) => a.length - b.length);
console.log(JSON.stringify(arr, null, 2));
这是一个按照字符串长度排序的 JavaScript 排序方法,使用了您要求的 Bubble sort 冒泡排序 方法:
var arr = ['1234', '12', '12345', '1'];
bubbleSort(arr );
function bubbleSort(a) {
var swapped;
do {
swapped = false;
for (var i = 0; i < a.length - 1; i++) {
if (a[i].length < a[i + 1].length) {
var temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
swapped = true;
}
}
} while (swapped);
}
console.log(arr );
let arr = [5,2,100,1,20,3];
arr.sort((a,b)=>{
return a-b
})
console.log(arr) //[1, 2, 3, 5, 20, 100]
在返回值方面,sort方法将执行元素交换的功能。
return < 0 { i.e -ve number then a comes before b}
return > 0 { i.e +ve number then b comes before a}
return == 0 { order of a and b remains same }
如果您想保留与原始数组相同长度的元素顺序,请使用冒泡排序。
Input = ["ab","cdc","abcd","de"];
Output = ["ab","cd","cdc","abcd"]
function bubbleSort(strArray){
const arrayLength = Object.keys(strArray).length;
var swapp;
var newLen = arrayLength-1;
var sortedStrArrByLenght=strArray;
do {
swapp = false;
for (var i=0; i < newLen; i++)
{
if (sortedStrArrByLenght[i].length > sortedStrArrByLenght[i+1].length)
{
var temp = sortedStrArrByLenght[i];
sortedStrArrByLenght[i] = sortedStrArrByLenght[i+1];
sortedStrArrByLenght[i+1] = temp;
swapp = true;
}
}
newLen--;
} while (swap);
return sortedStrArrByLenght;
}
#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(function(arg1, arg2) { return arg1.length - arg2.length })
这段代码应该能解决问题:
var array = ["ab", "abcdefgh", "abcd"];
array.sort(function(a, b){return b.length - a.length});
console.log(JSON.stringify(array, null, '\t'));
let array = [`ab`, `abcdefgh`, `abcd`];
let newArray = array.sort((a,b) => {
return b.length - a.length
})
console.log(newArray);