1

配列に読み込んでいるデータファイルがあります。元のデータファイルによって作成された配列は次のようになります。

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

.filterを使用して配列からベンダーを選択します(これは正常に機能しています)が、新しい配列(ベンダーコードが1つだけ含まれている配列)を次のような配列に変更する必要があります。

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

.pushを使用して数量を取得できますが、フルーツ名をフィールド名から「fruitName」フィールドの値に変更するにはどうすればよいですか?

4

5 に答える 5

6

選択したベンダーオブジェクトがある場合は、次のようにしてを作成できます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]});
    }
}
于 2013-03-25T16:31:13.873 に答える
1

これを試して

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(); 

desiredArray価値がある

[ {fruitName: "bananas", qty: 50},
  {fruitName: "apples", qty: 75 },
  {fruitName: "oranges", qty: 12} ]
于 2013-03-25T16:34:45.163 に答える
1

for...inループを使用します。

    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]});
    }
于 2013-03-25T16:38:02.517 に答える
1
   var a = [{vendor:2001,apple :50,orange:20},{vendor:2002,apple:50, orange:10}];

   var matchedVendor = 2001;

フィルタ用

    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]});
    }
 }
于 2013-03-25T17:07:26.050 に答える
0
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]});
}
于 2013-03-25T16:35:21.560 に答える