我有一个数据文件,正在读取到数组中。原始数据文件创建的数组如下所示:
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]});
}