对除第一项以外的数组进行排序。 Array.prototype.sort()
Sort an array except the first item. Array.prototype.sort()
let array = [{
name: 'first'
}, {
name: 'd'
}, {
name: 'cc'
}, {
name: 'bbb'
}, {
name: 'aaaa'
}]
let firstElement = array.shift()
// sort array by item name's length:
array.sort((a, b) => {
return b.name.length - a.name.length
})
array.unshift(firstElement)
console.log(array)
我目前正在使用这段代码,虽然我相信我可以通过在 array.sort()
的函数中实现这个逻辑来摆脱 firstElement's .shift()
和后来的 .unshift()
所以我不必创建额外的数组。我已经尝试了在这里找到的几个答案,但 none 到目前为止对我的用例有效。
您可以检查非第一个元素的 sort() 方法:
let array = [{
name: 'first'
}, {
name: 'd'
}, {
name: 'cc'
}, {
name: 'bbb'
}, {
name: 'aaaa'
}]
array.sort((a, b) => {
if (a !== array[0] && b !== array[0]) { // Check if there are not first element
return b.name.length - a.name.length
}
})
单独使用排序函数实际上是不可能的,至少在包含任意数据的数组的一般情况下是不可能的。如果元素包含第一个元素的多个副本,则将传递给排序函数的值与 中的第一个元素进行比较失败,例如:
let x = {name:'first'};
let array = [x,{name:'d'},{name:'cc'},{name:'bbb'},x,{name:'aaaa'}];
array.sort((a, b) => {
if (a !== array[0] && b !== array[0]) { // Check if there are not first element
return b.name.length - a.name.length
}
});
console.log(array);
它可能适用于你的情况,因为你似乎有一个没有重复元素的对象数组,但对于更一般的情况,你必须比较索引,而不是元素 - 这是不可能使用 .sort
,设计使然。比较器函数通常应该只比较元素的值而不是其他任何东西。
我通常会坚持你已经拥有的东西;性能差异最多将是最小的,如果你决定在你的数组中添加重复项或有一天引入其他类型,它不会容易中断。
let array = [{
name: 'first'
}, {
name: 'd'
}, {
name: 'cc'
}, {
name: 'bbb'
}, {
name: 'aaaa'
}]
let firstElement = array.shift()
// sort array by item name's length:
array.sort((a, b) => {
return b.name.length - a.name.length
})
array.unshift(firstElement)
console.log(array)
我目前正在使用这段代码,虽然我相信我可以通过在 array.sort()
的函数中实现这个逻辑来摆脱 firstElement's .shift()
和后来的 .unshift()
所以我不必创建额外的数组。我已经尝试了在这里找到的几个答案,但 none 到目前为止对我的用例有效。
您可以检查非第一个元素的 sort() 方法:
let array = [{
name: 'first'
}, {
name: 'd'
}, {
name: 'cc'
}, {
name: 'bbb'
}, {
name: 'aaaa'
}]
array.sort((a, b) => {
if (a !== array[0] && b !== array[0]) { // Check if there are not first element
return b.name.length - a.name.length
}
})
单独使用排序函数实际上是不可能的,至少在包含任意数据的数组的一般情况下是不可能的。如果元素包含第一个元素的多个副本,则将传递给排序函数的值与
let x = {name:'first'};
let array = [x,{name:'d'},{name:'cc'},{name:'bbb'},x,{name:'aaaa'}];
array.sort((a, b) => {
if (a !== array[0] && b !== array[0]) { // Check if there are not first element
return b.name.length - a.name.length
}
});
console.log(array);
它可能适用于你的情况,因为你似乎有一个没有重复元素的对象数组,但对于更一般的情况,你必须比较索引,而不是元素 - 这是不可能使用 .sort
,设计使然。比较器函数通常应该只比较元素的值而不是其他任何东西。
我通常会坚持你已经拥有的东西;性能差异最多将是最小的,如果你决定在你的数组中添加重复项或有一天引入其他类型,它不会容易中断。