Question

I have a data file that I'm reading into an array. The array created by the original data file looks like this:

var originalArray = [ {vendor: 2001, bananas: 50, apples:75, oranges: 12},
                      {vendor: 2002, bananas: 25, apples:60, oranges: 82},
                      {vendor: 2003, bananas: 36, apples:41, oranges: 73},
                      {vendor: 2004, bananas: 59, apples:62, oranges: 87}];

I select a vendor from the array using .filter (this is working fine) but then I need to change the new array (the one that contains only one vendor code) into an array that looks like this.

var desiredArray = [ {fruitName: "bananas", qty: 50},
                     {fruitName: "apples", qty: 75 },
                     {fruitName: "oranges", qty: 12} ];

Using .push I can get the quantities, but how can I get the fruit names to go from field names to values in the "fruitName" field?

Was it helpful?

Solution

If you've got the selected vendor object, you can do something like this to create the desiredArray.

var desiredArray = [];
var selectedVendor = originalArray[2]; // this is the vendor you got via .filter

for(property in selectedVendor) {
    if(property !== 'vendor') {
        desiredArray.push({fruitName: property, qty: selectedVendor[property]});
    }
}

OTHER TIPS

Use the for...in loop:

    var currentVendor;
    var desiredArray = [];

    //ok, this is only an example
    currentVendor = {vendor: 2001, bananas: 50, apples:75, oranges: 12};
    for (var prop in currentVendor) {
        if(prop!='vendor')
            desiredArray.push({fruitName: prop, qty: currentVendor[prop]});
    }
   var a = [{vendor:2001,apple :50,orange:20},{vendor:2002,apple:50, orange:10}];

   var matchedVendor = 2001;

For Filter

    var filteredArray = [];
    for (var i=0; i < a.length; i++){
    if(a[i].vendor === matchedVendor){
     filteredArray = a[i];
          break;
     }}


    var desiredArray = [];

    for(prop in filteredArray){
    if(prop !== "vendor"){
        desiredArray.push({fruitName:prop,qty:filteredArray[prop]});
    }
 }

Try this

var vendorId = 2001;

var desiredArray = originalArray.filter( function( v ) {

    return v.vendor == vendorId ;

}).map( function( v ){

    var s = [];

    for ( var i in v ){

        if ( i == 'vendor' ) continue;

        s.push( {fruitName: i , qty: v[i] } );            
    }
    return s;

}).pop(); 

The desiredArray has value

[ {fruitName: "bananas", qty: 50},
  {fruitName: "apples", qty: 75 },
  {fruitName: "oranges", qty: 12} ]
var fruit = {};
for (var i = 0; i < originalArray.length; i++) {
  for (var key in originalArray[i]) {
    if (key != selectedVendor)
      continue;
    if (!fruit[key])
      fruit[key] = 0;
    fruit[key] += originalArray[i][key];
  }
}
var desiredArray = [];
for (var fruitName in fruit) {
  desiredArray.push({fruit: fruitName, qty: fruit[fruitName]});
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top