-1

I have a list for order of field to display

field_order = ["name", "age", "birthday"]

I got a list of objects like this

_data_set = {
    "age": 23,
    "birthday": "2000-12-12"
    "name": "A"
}

I need to order Object keys according to field_order.

Expected result:

_data_set = {
    "name": "A",
    "age": 23,
    "birthday": "2000-12-12"
}
shafik
  • 4,713
  • 5
  • 27
  • 44

3 Answers3

2

Key order is chronological in JavaScript since ES2015, so we can order like so:

There's a nice article on this: property-traversal-order-es6

field_order = ["name", "age", "birthday"]
_data_set = {
    "age": 23,
    "birthday": "2000-12-12",
    "name": "A"
};

let result = field_order.reduce( (obj, v) => {
   obj[v] = _data_set[v];
   return obj;
}, {});

console.log(result);
Terry Lennox
  • 17,423
  • 2
  • 18
  • 28
1

At first you need to sort and then just create an object with desired order of keys:

let field_order = ["name", "age", "birthday"];
let _data_set = {
  "age": 23,
  "birthday": "2000-12-12",
  "name": "A"
}

let order = {name: -1, age: 0, birthday: 1};

const result = {};
Object.keys(_data_set)
    .sort((a,b)=> order[a] - order[b])
    .forEach(key=> result[key] = _data_set[key]);

console.log(result);
StepUp
  • 27,357
  • 12
  • 66
  • 120
1

You could use the following:

let new_data_set = {};
for(let item of field_order) {
   new_data_set[item] = _data_set[item];
}
Jeff Pal
  • 1,036
  • 11
  • 18