0

What is the best way to sort this:

{
    abc: {
        string: 'lorem',
        date: 2
    },
    enc: {
        string: 'ipsum',
        date: 1
    }
}

into this:

[{
    id: 'enc',
    string: 'ipsum',
    date: 1
},
{
    id: 'abc',
    string: 'lorem',
    date: 2
}]

I need an array sorted by the date (Number) with a flat object.

1
  • Probably by extracting the dates into a sortable object, such an array, sort that and append the objects according to the sort. Commented Nov 28, 2010 at 21:20

4 Answers 4

7

First, you need to convert the original object into an array in the format you want:

var arr = [];
for (var key in obj)
  if (obj.hasOwnProperty(key)) {
    var o = obj[key];
    arr.push({ id: key, string: o.string, date: o.date });
  }

Then, you can use the array sort method with a custom comparator for sorting by the date field:

arr.sort(function(obj1, obj2) {
  return obj1.date - obj2.date;
});
Sign up to request clarification or add additional context in comments.

Comments

0

This will do the trick.

var stuff = {
    abc: {
        string: 'lorem',
        date: 2
    },
    enc: {
        string: 'ipsum',
        date: 1
    }
};

// Put it into an array
var list = [];
for(var i in stuff) {
    if (stuff.hasOwnProperty(i)) {
        list.push(stuff[i]);
    }
}

// sort the array
list.sort(function(a, b) {
    return a.date - b.date;
});

See also:
https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference:Global_Objects:Array:sort

Comments

0

I would do it in two steps: First, convert the object to an array:

var array = [],
   o;

for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
        o = obj[key];
        o.id = key;
        array.push(o);
    }
}

Then, sort it like this:

array.sort(function (a, b) {
    a.date - b.date;
});

Comments

0

Here's my quick one-liner for this:

let new = Object.entries(obj).map((n) => ({ id: n[0], ...n[1] })).sort(({ date: a }, { date: b }) => a - b)

Let's break it down:

let new = Object.entries(obj);                        // convert object to [ key, value ] array
new = new.map((n) => ({ id: n[0], ...n[1] }) );       // map array to [ { id: key, ...value } ]
new = new.sort(({ date: a }, { date: b }) => a - b);  // sort by date

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.