0

I have an array with key value pair items I want to add space in Every Key after every capital letter.

var items = [
{
    "BrandConstruct": 165,
    "YearPlanData": "a"
},
{
    "BrandConstruct": 236,
    "YearPlanData": "c"
},
{
    "BrandConstruct": 376,
    "YearPlanData": "b"
}
]

Above is my array and I want it as below:-

var items = [
{
    "Brand Construct": 165,
    "Year Plan Data": "a"
},
{
    "Brand Construct": 236,
    "Year Plan Data": "c"
},
{
    "Brand Construct": 376,
    "Year Plan Data": "b"
}
]

and again I want to do it back in original form in javascript

CertainPerformance
  • 356,069
  • 52
  • 309
  • 320
Anshul
  • 61
  • 1
  • 7

3 Answers3

0

map each item to a new item, iterating over the entries and replacing the keys appropriately:

var items = [{
    "BrandConstruct": 165,
    "YearPlanData": "a"
  },
  {
    "BrandConstruct": 236,
    "YearPlanData": "c"
  },
  {
    "BrandConstruct": 376,
    "YearPlanData": "b"
  }
];
const addSpaces = str => str.replace(/(.)([A-Z])/g, '$1 $2');
const newItems = items.map(item => (
  Object.entries(item).reduce(
    (a, [key, val]) => Object.assign(a, { [addSpaces(key)]: val }),
    {}
  )
));
console.log(newItems);
CertainPerformance
  • 356,069
  • 52
  • 309
  • 320
  • Should we really reward no effort with something that is even a duplicate? – mplungjan Jul 03 '18 at 07:40
  • Also I really, really think this is easier to read/understand for a noob: `items.forEach(function(item,i) { newItems[i]={}; for (var o in item) { newItems[i][o.replace(/([a-z])([A-Z])/g, '$1 $2')]=item[o]; } });` – mplungjan Jul 03 '18 at 07:53
0

Use Array.map to iterate over each object and create a new object using Array.reduce and Regex

var items = [{"BrandConstruct": 165,"YearPlanData": "a"},{"BrandConstruct": 236,"YearPlanData": "c"},{"BrandConstruct": 376,"YearPlanData": "b"}];

items = items.map(o => Object.entries(o).reduce((a,[k,v]) => Object.assign(a, {[k.replace(/([a-z](?=[A-Z]))/g, '$1 ')] :v}), {}));
console.log(items);
Nikhil Aggarwal
  • 28,197
  • 4
  • 43
  • 59
0

Use RegExp() and split() to achieve this:

var items = [
  {
      "BrandConstruct": 165,
      "YearPlanData": "a"
  },
  {
      "BrandConstruct": 236,
      "YearPlanData": "c"
  },
  {
      "BrandConstruct": 376,
      "YearPlanData": "b"
  }
];
var res = items.map((item) => {
  var keys = Object.keys(item);
    keys.forEach((key)=>{
    var newKey = key.split(/(?=[A-Z])/);
    item[newKey.join(' ')] = item[key];
    delete item[key];
  });
  return item;
  
});
console.log(res);
Ankit Agarwal
  • 30,378
  • 5
  • 37
  • 62