Site logo

Sorting two arrays according to one

Sort array of names by characters count

In this example, I have a list of names that I want to sort by width (number of characters) in descending order: from long to short.

main();

function main() {
	var n, k, j, sortedNames,
	namesLength = [], // Make an array of name lengths
	unsortedNames = [];	
	
	// Array of names
	var names = [ "Charlotte",
					"Alarna",
					"Albie",
					"Freya",
					"Ollie",
					"Alexandria",
					"Grayson",
					"Lily",
					"Freya",
					"Kourtney",
					"Amelia",
					"Dylan",
					"Mila",
					"Liam",
					"Esme",
					"Brody",
					"Brooke",
					"Ava",
					"Maddison",
					"Kayla",
					"Grace",
					"Sean",
					"Oliver",
					"Max",
					"Charlie",
					"Beyonce-Honey",
					"Abigail",
					"Leonora",
					"Alfie",
					"Willow",
					"Scarlet",
					"Annabelle" ];
	
	for (n = 0; n < names.length; n++) {
		namesLength.push(names[n].length);
	}

	for (k = 0; k < names.length; k++) {
		unsortedNames.push({
			name: names[k],
			namesLength: namesLength[k]
		});
	}

	// Now sorting the array by ‘namesLength’ in descending order
	// For ascending order swap a and b: a.namesLength - b.namesLength
	sortedNames = unsortedNames.sort(function(a, b) { return b.namesLength - a.namesLength; });

	for (var j = 0; j < sortedNames.length; j++) {
		$.writeln(sortedNames[j].name + " --> " + sortedNames[j].namesLength);
	}
}

Click here to download this snippet.