简体   繁体   English

生成不同对象Javascript的对象数组

[英]Generate Array of Objects of different Objects Javascript

I have severel Objects containing one sort of data: Prices: 我有包含以下数据的严重对象:价格:

'btc-usd' : 2640, 'ltc-usd': 40, ...

Amount of Crypto: 加密数量:

'btc-usd': 2.533, 'ltc-usd': 10.42, ...

How can I take these Objects and create an Array of Objects like: 如何获取这些对象并创建对象数组,例如:

[ { name: 'Bitcoin', amount: 2.533, value: 2640, id: 'btc-usd' },
 { name: 'Litecoin', amount: 10.42, value: 40, id: 'ltc-usd' }, ...
]

Thanks a lot for your help! 非常感谢你的帮助!

You could use a hash map (eg 'btc-usd' => {name:"Bitcoin",...} ) to create new objects. 您可以使用哈希映射(例如'btc-usd'=> {name:“ Bitcoin”,...} )创建新对象。 This hashmap can be easily converted to an array. 此哈希图可以轻松转换为数组。

var input={
  value:{'btc-usd' : 2640, 'ltc-usd': 40},
  amount:{'btc-usd': 2.533, 'ltc-usd': 10.42},
  name:{"btc-usd":"Bitcoin","ltc-usd":"Litecoin"}
};

var hash={};
for(key in input){
   var values=input[key];
   for(id in values){
      if(!hash[id]) hash[id]={id:id};
      hash[id][key]=values[id];
    }
}

var output=Object.values(hash);

http://jsbin.com/fadapafaca/edit?console http://jsbin.com/fadapafaca/edit?console

Here's a generalized function, add , that accepts a field name and an object of values and maps them into a result object which can then be mapped into an array. 这是一个通用函数add ,它接受一个字段名和一个值对象,并将它们映射到result对象中,然后可以将其映射到数组中。

 const amounts = {btc: 123.45, eth: 123.45}; const names = {btc: 'Bitcoin', eth: 'Etherium'}; const result = {}; const add = (field, values) => { Object.keys(values).forEach(key => { // lazy initialize each object in the resultset if (!result[key]) { result[key] = {id: key}; } // insert the data into the field for the key result[key][field] = values[key]; }); } add('amount', amounts); add('name', names); // converts the object of results to an array and logs it console.log(Object.keys(result).map(key => result[key])); 

You could map the keys of one of the objects to produce a new array of objects. 您可以映射其中一个对象的键以生成新的对象数组。 You just have to make sure, that the key is in every of these objects. 您只需要确保密钥在每个这些对象中即可。

const names = {
    'btc-usd' : 'Bitcoin', 
    'ltc-usd': 'Litecoin', 
    ...
}

const prices = {
    'btc-usd' : 2640, 
    'ltc-usd': 40, 
    ...
}

const amounts = {
    'btc-usd': 2.533, 
    'ltc-usd': 10.42, 
    ...
}

const cryptos = Object.keys(names).map((key, index) => ({
    name: names[key],
    amount: amounts[key] , 
    value: prices[key]},
    id: key
}));
const prices = {
  'btc-usd' : 2640,
  'ltc-usd': 40
};

const amounts = {
  'btc-usd': 2.533,
  'ltc-usd': 10.42
};

First, create a dictionary of what each abbreviation stands for. 首先,创建每个缩写所代表的字典。

const dictionary = {
  'btc': 'Bitcoin',
  'ltc': 'Litecoin'
};

Then, populate an empty array with objects containing the relevant information. 然后,用包含相关信息的对象填充一个空数组。 In each of these objects, the name would correspond to the relevant key within the dictionary object. 在每个这些对象中,名称将对应于dictionary对象中的相关键。 At the same time, the amount and value would correspond to the relevant key within the amounts and prices objects respectively. 同时,数量和值将分别对应于amountsprices对象中的相关键。 Finally, the Id would correspond to the key itself. 最后, Id将对应于key本身。

const money = [];

for(let coin in prices) {
  money.push({
    name: dictionary[coin.substr(0, coin.indexOf('-'))],
    amount: amounts[coin],
    value: prices[coin],
    id: coin
  });
}

console.log(money);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM