我有一个这样的数组:
arr = []
arr[0] = "ab"
arr[1] = "abcdefgh"
arr[2] = "abcd"
排序后,输出数组应为:
arr[0] = "abcdefgh"
arr[1] = "abcd"
arr[2] = "ab"
我的意思是,我希望按每个元素长度的降序排列。
答案 0 :(得分:189)
您可以使用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"]
。根据{{3}}:
排序不一定稳定(即比较的元素 等于不一定保持原来的顺序。)
如果目标是按长度排序,然后按字典顺序排序,则必须指定其他条件:
["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
});
答案 1 :(得分:3)
这是排序,取决于你问的javascript字符串的长度:
[冒泡排序问题的解决方案] [1]
[1]:http://jsfiddle.net/sssonline2/vcme3/2/ enter code here
答案 2 :(得分:2)
我们可以使用 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中,我们可以使用 arrow function expressions 。
let array = ["ab", "abcdefgh", "abcd"];
array.sort((a, b) => b.length - a.length);
console.log(JSON.stringify(array, null, '\t'));
答案 3 :(得分:0)
根据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原型中,如this page所述。
此外,它修改了作为参数传递的数组,并且不返回任何内容。这会强制重复数组,对大型数组来说不是很好。如果有人有更好的想法,请发表评论!
答案 4 :(得分:0)
我改编了@ shareef的答案,使其简洁明了。我用,
.sort(function(arg1, arg2) { return arg1.length - arg2.length })
答案 5 :(得分:0)
#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
答案 6 :(得分:0)
如果要保留与原始数组相同长度的元素顺序,请使用冒泡排序。
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;
}
答案 7 :(得分:0)
使用现代 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));
答案 8 :(得分:-1)
此代码应能解决问题:
var array = ["ab", "abcdefgh", "abcd"];
array.sort(function(a, b){return b.length - a.length});
console.log(JSON.stringify(array, null, '\t'));
答案 9 :(得分:-1)
let array = [`ab`, `abcdefgh`, `abcd`];
let newArray = array.sort((a,b) => {
return b.length - a.length
})
console.log(newArray);
请输入以下代码
答案 10 :(得分:-2)
<script>
arr = []
arr[0] = "ab"
arr[1] = "abcdefgh"
arr[2] = "sdfds"
arr.sort(function(a,b){
return a.length<b.length
})
document.write(arr)
</script>
你传递给sort的匿名函数告诉它如何对给定的array.hope进行排序这有帮助。我知道这很令人困惑但你可以通过传递一个函数来告诉sort函数如何对数组的元素进行排序告诉它该做什么的参数