1

I want to loop over the data object and pick two items i.e. year and revenue from it and put it into a new object

var data [{"year": 2014, "revenue": 20000, "costs": 10000, "hours": 50}, {"year": 2015, "revenue": 30000, "costs": 20000, "hours": 54}, {"year": 2016, "revenue": 30000, "costs": 10000, "hours": 40}]

var pickedData = {};

data.forEach(output)

function output(d) {
     Object.assign({}, pickedData.Year = d.year),
     Object.assign({}, pickedData.Revenue = d.revenue)
}

The code works but assign only the last item in data to the new object pickedData which means it is looping it over but not assigning value to the object everytime it goes through. How can I have output like this:

console.log(pickedData)
 [{Year: 2014, Revenue: 20000}, {Year: 2015, Revenue: 30000}, {Year: 2016, Revenue: 30000}]
Hannan
  • 1,171
  • 6
  • 20
  • 39
  • Why do you use `Object.assign` and why in this way? Take a look at [its documentation](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign). Pushing objects inside your `pickedData` object can easily be done with `Array.push` as explained here: [How to add an object to an array](https://stackoverflow.com/questions/6254050/how-to-add-an-object-to-an-array) – Zabuzard Aug 20 '17 at 21:59

3 Answers3

2

You can use map() method instead and return new array as result.

var data = [{"year": 2014, "revenue": 20000, "costs": 10000, "hours": 50}, {"year": 2015, "revenue": 30000, "costs": 20000, "hours": 54}, {"year": 2016, "revenue": 30000, "costs": 10000, "hours": 40}]

var result = data.map(({year, revenue}) => ({year, revenue}));
console.log(result)
Nenad Vracar
  • 118,580
  • 15
  • 151
  • 176
1
var pickedData = data.map(item => {
  return {
    Year: item.year,
    Revenue: item.revenue
  }
})
n30n0v
  • 24
  • 3
0

var data = [{"year": 2014, "revenue": 20000, "costs": 10000, "hours": 50}, {"year": 2015, "revenue": 30000, "costs": 20000, "hours": 54}, {"year": 2016, "revenue": 30000, "costs": 10000, "hours": 40}];

var pickedDate = data.map(function(v,i,a){
  var retObj={};
  if(v.year) retObj.year = v.year;
  if(v.revenue != undefined) retObj.revenue=v.revenue;
  return retObj;
})

console.log(pickedDate);
joopmicroop
  • 891
  • 5
  • 15