Skip to content

Instantly share code, notes, and snippets.

@ronsims2
Forked from anonymous/index.html
Created September 22, 2015 12:30
Show Gist options
  • Save ronsims2/790a187b11722498afa8 to your computer and use it in GitHub Desktop.
Save ronsims2/790a187b11722498afa8 to your computer and use it in GitHub Desktop.
JS Bin [Javascript object orderer] // source https://jsbin.com/dirixi
<!DOCTYPE html>
<html>
<head>
<meta name="description" content="[Javascript object orderer]" />
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<script id="jsbin-javascript">
/**
*@Name orderItems
@Param items array - a list of object to sort
@param field string - name of field to order by, should be , numeric or string accepted
@Param rank string name of field that holds new oeder ranking, value is a numeric.
@param clean bool - optional, tells function to remove added meta data
*/
function orderItems(items, field, rank, clean){
//Holds sorted items
var sorted = [];
//Tracks if sorted needs to be expanded because multiple items exist
var hasNested = 0;
//Loop through items to compare them against each other
for(var i = 0; i < items.length; i++){
var item = items[i]; //current item being compared
item[rank] = 0;
//Loop to compare items
for(var j = 0; j < items.length; j++){
var compItem = items[j];
//Don't compare against self
if (i !== j) {
if (item[field] > compItem[field]) {
//Increase rank if item is greater
item[rank]++;
}
}
}
//Expand sorted list to size of items
sorted.push(null);
}
//Loop through items and place in order of rank. If a draw, get next available spot
for(var l = 0; l < items.length; l++){
var ranking = items[l][rank];
//clean up meta data
if (clean) {
delete items[l][rank];
}
if (sorted[ranking] === null) {
sorted[ranking] = items[l];
}
else{
//Add to rank array
if (sorted[ranking] instanceof Array) {
sorted[ranking].push(items[l]);
}
//Create rank array if
else {
var rankContainer = [sorted[ranking], items[l]];
sorted[ranking] = rankContainer;
hasNested++;
}
}
}
//Expand sorted if necessary
if (hasNested) {
var expanded = [];
for (var m = 0; m < sorted.length; m++){
var itm = sorted[m];
if (itm instanceof Array) {
for(var n = 0; n < itm.length; n++){
expanded.push(itm[n]);
}
}
else {
if (itm) {
expanded.push(itm);
}
}
}
sorted = expanded;
}
return sorted;
}
var items = [
{value:9, matches: 0, rank: 0},
{value:2, matches: 0, rank: 0},
{value:5, matches: 0, rank: 0},
{value:6, matches: 0, rank: 0},
{value:3, matches: 0, rank: 0},
{value:1, matches: 0, rank: 0},
{value:4, matches: 0, rank: 0},
{value:7, matches: 0, rank: 0},
{value:7, matches: 0, rank: 0},
{value:7, matches: 0, rank: 0},
{value:7, matches: 0, rank: 0},
{value:8, matches: 0, rank: 0},
{value:5, matches: 0, rank: 0},
{value:6, matches: 0, rank: 0},
{value:3, matches: 0, rank: 0},
{value:1, matches: 0, rank: 0}
];
/*var items = [
{value:"banana", matches: 0, rank: 0},
{value:"apple", matches: 0, rank: 0},
{value:"lime", matches: 0, rank: 0},
{value:"cherry", matches: 0, rank: 0},
{value:"cherry", matches: 0, rank: 0},
{value:"fig", matches: 0, rank: 0},
{value:"date", matches: 0, rank: 0},
{value:"fig", matches: 0, rank: 0},
{value:"orange", matches: 0, rank: 0}
];*/
sorted = orderItems(items, "value", "matches", true);
console.log(sorted);
</script>
<script id="jsbin-source-javascript" type="text/javascript">/**
*@Name orderItems
@Param items array - a list of object to sort
@param field string - name of field to order by, should be , numeric or string accepted
@Param rank string name of field that holds new oeder ranking, value is a numeric.
@param clean bool - optional, tells function to remove added meta data
*/
function orderItems(items, field, rank, clean){
//Holds sorted items
var sorted = [];
//Tracks if sorted needs to be expanded because multiple items exist
var hasNested = 0;
//Loop through items to compare them against each other
for(var i = 0; i < items.length; i++){
var item = items[i]; //current item being compared
item[rank] = 0;
//Loop to compare items
for(var j = 0; j < items.length; j++){
var compItem = items[j];
//Don't compare against self
if (i !== j) {
if (item[field] > compItem[field]) {
//Increase rank if item is greater
item[rank]++;
}
}
}
//Expand sorted list to size of items
sorted.push(null);
}
//Loop through items and place in order of rank. If a draw, get next available spot
for(var l = 0; l < items.length; l++){
var ranking = items[l][rank];
//clean up meta data
if (clean) {
delete items[l][rank];
}
if (sorted[ranking] === null) {
sorted[ranking] = items[l];
}
else{
//Add to rank array
if (sorted[ranking] instanceof Array) {
sorted[ranking].push(items[l]);
}
//Create rank array if
else {
var rankContainer = [sorted[ranking], items[l]];
sorted[ranking] = rankContainer;
hasNested++;
}
}
}
//Expand sorted if necessary
if (hasNested) {
var expanded = [];
for (var m = 0; m < sorted.length; m++){
var itm = sorted[m];
if (itm instanceof Array) {
for(var n = 0; n < itm.length; n++){
expanded.push(itm[n]);
}
}
else {
if (itm) {
expanded.push(itm);
}
}
}
sorted = expanded;
}
return sorted;
}
var items = [
{value:9, matches: 0, rank: 0},
{value:2, matches: 0, rank: 0},
{value:5, matches: 0, rank: 0},
{value:6, matches: 0, rank: 0},
{value:3, matches: 0, rank: 0},
{value:1, matches: 0, rank: 0},
{value:4, matches: 0, rank: 0},
{value:7, matches: 0, rank: 0},
{value:7, matches: 0, rank: 0},
{value:7, matches: 0, rank: 0},
{value:7, matches: 0, rank: 0},
{value:8, matches: 0, rank: 0},
{value:5, matches: 0, rank: 0},
{value:6, matches: 0, rank: 0},
{value:3, matches: 0, rank: 0},
{value:1, matches: 0, rank: 0}
];
/*var items = [
{value:"banana", matches: 0, rank: 0},
{value:"apple", matches: 0, rank: 0},
{value:"lime", matches: 0, rank: 0},
{value:"cherry", matches: 0, rank: 0},
{value:"cherry", matches: 0, rank: 0},
{value:"fig", matches: 0, rank: 0},
{value:"date", matches: 0, rank: 0},
{value:"fig", matches: 0, rank: 0},
{value:"orange", matches: 0, rank: 0}
];*/
sorted = orderItems(items, "value", "matches", true);
console.log(sorted);</script></body>
</html>
/**
*@Name orderItems
@Param items array - a list of object to sort
@param field string - name of field to order by, should be , numeric or string accepted
@Param rank string name of field that holds new oeder ranking, value is a numeric.
@param clean bool - optional, tells function to remove added meta data
*/
function orderItems(items, field, rank, clean){
//Holds sorted items
var sorted = [];
//Tracks if sorted needs to be expanded because multiple items exist
var hasNested = 0;
//Loop through items to compare them against each other
for(var i = 0; i < items.length; i++){
var item = items[i]; //current item being compared
item[rank] = 0;
//Loop to compare items
for(var j = 0; j < items.length; j++){
var compItem = items[j];
//Don't compare against self
if (i !== j) {
if (item[field] > compItem[field]) {
//Increase rank if item is greater
item[rank]++;
}
}
}
//Expand sorted list to size of items
sorted.push(null);
}
//Loop through items and place in order of rank. If a draw, get next available spot
for(var l = 0; l < items.length; l++){
var ranking = items[l][rank];
//clean up meta data
if (clean) {
delete items[l][rank];
}
if (sorted[ranking] === null) {
sorted[ranking] = items[l];
}
else{
//Add to rank array
if (sorted[ranking] instanceof Array) {
sorted[ranking].push(items[l]);
}
//Create rank array if
else {
var rankContainer = [sorted[ranking], items[l]];
sorted[ranking] = rankContainer;
hasNested++;
}
}
}
//Expand sorted if necessary
if (hasNested) {
var expanded = [];
for (var m = 0; m < sorted.length; m++){
var itm = sorted[m];
if (itm instanceof Array) {
for(var n = 0; n < itm.length; n++){
expanded.push(itm[n]);
}
}
else {
if (itm) {
expanded.push(itm);
}
}
}
sorted = expanded;
}
return sorted;
}
var items = [
{value:9, matches: 0, rank: 0},
{value:2, matches: 0, rank: 0},
{value:5, matches: 0, rank: 0},
{value:6, matches: 0, rank: 0},
{value:3, matches: 0, rank: 0},
{value:1, matches: 0, rank: 0},
{value:4, matches: 0, rank: 0},
{value:7, matches: 0, rank: 0},
{value:7, matches: 0, rank: 0},
{value:7, matches: 0, rank: 0},
{value:7, matches: 0, rank: 0},
{value:8, matches: 0, rank: 0},
{value:5, matches: 0, rank: 0},
{value:6, matches: 0, rank: 0},
{value:3, matches: 0, rank: 0},
{value:1, matches: 0, rank: 0}
];
/*var items = [
{value:"banana", matches: 0, rank: 0},
{value:"apple", matches: 0, rank: 0},
{value:"lime", matches: 0, rank: 0},
{value:"cherry", matches: 0, rank: 0},
{value:"cherry", matches: 0, rank: 0},
{value:"fig", matches: 0, rank: 0},
{value:"date", matches: 0, rank: 0},
{value:"fig", matches: 0, rank: 0},
{value:"orange", matches: 0, rank: 0}
];*/
sorted = orderItems(items, "value", "matches", true);
console.log(sorted);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment