使用字段名称创建新的 Javascript 数组
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/15619747/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Create new Javascript array with field names
提问by DG_Montana
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.
我使用 .filter 从数组中选择一个供应商(这工作正常),但随后我需要将新数组(仅包含一个供应商代码的数组)更改为如下所示的数组。
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?
使用 .push 我可以获得数量,但是如何让水果名称从字段名称变为“fruitName”字段中的值?
回答by clav
If you've got the selected vendor object, you can do something like this to create the desiredArray
.
如果您已获得选定的供应商对象,则可以执行类似操作来创建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]});
}
}
回答by Alberto De Caro
Use the for...in
loop:
使用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]});
}
回答by karthick
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]});
}
}
回答by rab
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
该desiredArray
具有价值
[ {fruitName: "bananas", qty: 50},
{fruitName: "apples", qty: 75 },
{fruitName: "oranges", qty: 12} ]
回答by Stuart M
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]});
}