質問

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?

役に立ちましたか?

解決

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]});
    }
}

他のヒント

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]});
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top