How to sort my array by length of its keys array in javascript ?
my_array = [];
my_array['a'] = ['val1', 'val2'];
my_array['b'] = ['val1', 'val2', 'val3'];
my_array['c'] = ['val1', 'val2'];
my_array['d'] = ['val1', 'val2', 'val3'];
my_array['e'] = ['val1'];
sort my_array should result :-
my_array [
'e' => ['val1'],
'a' => ['val1', 'val2'],
'c' => ['val1', 'val2'],
'b' => ['val1', 'val2', 'val3'],
'd' => ['val1', 'val2', 'val3']
];
Edit :- My original code is :
var rows = JSON.parse('my_json_string');
let my_array =[];
for( let x=0; x<rows.length; x++ )
{
if( Array.isArray( my_array[ rows[x].rowName ] ) )
{
my_array[ rows[x].rowName ].push( rows[x].rowValue );
}else{
my_array[ rows[x].rowName ] = [ rows[x].rowValue ];
}
}
let my_object = {};
my_object['a'] = ['val1', 'val2'];
my_object['b'] = ['val1', 'val2', 'val3'];
my_object['c'] = ['val1', 'val2'];
my_object['d'] = ['val1', 'val2', 'val3'];
my_object['e'] = ['val1'];
my_object = Object.fromEntries(
Object.entries(my_object).sort((a,b) => a[1].length-b[1].length)
);
console.log(my_object);
If there are numerical values in the key, you will need an array (or a Map):
let my_object = {};
my_object['a'] = ['val1', 'val2'];
my_object['1'] = ['val1', 'val2', 'val3'];
my_object['b'] = ['val1', 'val2', 'val3'];
my_object['c'] = ['val1', 'val2'];
my_object['d'] = ['val1', 'val2', 'val3'];
my_object['e'] = ['val1'];
my_object['2'] = [];
let myObjectArray = Object.entries(my_object)
.reduce((acc,[key,values]) => {
acc.push({key,arr:values});
return acc;
},[])
.sort((a,b) => a.arr.length-b.arr.length); // add rules to sort keys if same length
console.log(myObjectArray);