使用字段名称创建新的Javascript数组



我有一个数据文件,正在读取到数组中。原始数据文件创建的数组如下所示:

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从数组中选择一个供应商(这很好(,但随后我需要将新数组(只包含一个供应商代码的数组(更改为如下数组。

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

使用.push我可以获得数量,但如何获得从字段名称到"fruitName"字段中的值的水果名称?

如果您已经选择了vendor对象,您可以执行类似的操作来创建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]});
    }
}

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

试试这个

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

相关内容

  • 没有找到相关文章

最新更新