n <- 10
mat <- cor(matrix(rnorm(n*n),n,n))
ix <- matrix(NA,n*(n-1)/2,2)
k<-0
for (i in 1:(n-1)){
for (j in (i+1):n){
k <- k+1
ix[k,1]<-i
ix[k,2]<-j
}
}
o <- rep(NA,nrow(ix))
o <- mat[ix]
out <- cbind(ix,o)
Достаточно просто написать свою собственную функцию сравнения:
function compare( a, b ) {
if ( a.last_nom < b.last_nom ){
return -1;
}
if ( a.last_nom > b.last_nom ){
return 1;
}
return 0;
}
objs.sort( compare );
Или встроенную (через Марко Демайо):
objs.sort((a,b) => (a.last_nom > b.last_nom) ? 1 : ((b.last_nom > a.last_nom) ? -1 : 0));
единственная проблема с большинством этих ответов, когда Вы сортируете строки, которые содержат числа, она обычно выходит как это:
"тест № 1"
"тест № 10"
"тест № 5"
необходимо использовать Сортировально-подборочную машину, это - лучший ответ, который я нашел: https://stackoverflow.com/a/52955430/11591361
Если у вас есть повторяющиеся фамилии, вы можете отсортировать их по имени-
obj.sort(function(a,b){
if(a.last_nom< b.last_nom) return -1;
if(a.last_nom >b.last_nom) return 1;
if(a.first_nom< b.first_nom) return -1;
if(a.first_nom >b.first_nom) return 1;
return 0;
});
Вместо использования настраиваемой функции сравнения вы также можете создать тип объекта с помощью настраиваемого метода toString ()
(который вызывается функцией сравнения по умолчанию):
function Person(firstName, lastName) {
this.firtName = firstName;
this.lastName = lastName;
}
Person.prototype.toString = function() {
return this.lastName + ', ' + this.firstName;
}
var persons = [ new Person('Lazslo', 'Jamf'), ...]
persons.sort();
эта сортировка funciton может быть использованием для всей объектной сортировки,
объект
числовой массив deepObject
, можно также сделать согласный или убывающий вид путем передачи 1,-1 как параметрический усилитель
Object.defineProperty(Object.prototype, 'deepVal', {
enumerable: false,
writable: true,
value: function (propertyChain) {
var levels = propertyChain.split('.');
parent = this;
for (var i = 0; i < levels.length; i++) {
if (!parent[levels[i]])
return undefined;
parent = parent[levels[i]];
}
return parent;
}
});
function dynamicSortAll(property,sortOrders=1) {
/**default sorting will be ascending order if you need descending order
sording you have to pass -1 as param**/
var sortOrder = sortOrders;
return function (a,b) {
var result =(property? ((a.deepVal(property) > b.deepVal(property)) ? 1 : (a.deepVal(property) < b.deepVal(property)) ? -1 : 0) :((a > b) ? 1 : (a < b) ? -1 : 0))
return result * sortOrder;
}
}
deepObj = [
{
a: { a: 1, b: 2, c: 3 },
b: { a: 4, b: 5, c: 6 }
},
{
a: { a: 3, b: 2, c: 1 },
b: { a: 6, b: 5, c: 4 }
}];
let deepobjResult=deepObj.sort(dynamicSortAll('a.a',1))
console.log('deepobjResult :'+ JSON.stringify(deepobjResult))
var obj = [
{ first_nom: 'Lazslo', last_nom: 'Jamf' },
{ first_nom: 'Pig', last_nom: 'Bodine' },
{ first_nom: 'Pirate', last_nom: 'Prentice' }
];
let objResult=obj.sort(dynamicSortAll('last_nom',1))
console.log('objResult :'+ JSON.stringify(objResult))
var numericObj=[1,2,3,4,5,6]
let numResult=numericObj.sort(dynamicSortAll(null,-1))
console.log('numResult :'+ JSON.stringify(numResult))
let stringSortResult='helloworld'.split('').sort(dynamicSortAll(null,1))
console.log('stringSortResult:'+ JSON.stringify(stringSortResult))
let uniqueStringOrger=[...new Set(stringSortResult)];
console.log('uniqueStringOrger:'+ JSON.stringify(uniqueStringOrger))