Mam kilka obiektów zawierających jeden dane: Ceny:

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

Ilość Crypto:

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

Jak mogę wziąć te obiekty i stworzyć tablicę obiektów takich jak:

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

Bardzo dziękuję za Twoją pomoc!

0
Marcel 27 czerwiec 2017, 18:35

4 odpowiedzi

Najlepsza odpowiedź

Możesz mapować klawisze jednego z obiektów, aby wytworzyć nową tablicę obiektów. Musisz tylko upewnić się, że klucz jest w każdym z tych obiektów.

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
}));
0
trixn 27 czerwiec 2017, 16:02
const prices = {
  'btc-usd' : 2640,
  'ltc-usd': 40
};

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

Najpierw utwórz słownik tego, dla czego stoi każde skrót.

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

Następnie wypełnij pustą tablicę z obiektami zawierającymi odpowiednie informacje. W każdym z tych obiektów nazwa odpowiadałaby odpowiednim klawiszem w obiekcie dictionary. Jednocześnie ilość i wartość odpowiadałaby odpowiednio odpowiednim klawiszem w obiektach amounts i prices. Wreszcie, Id odpowiadałby sama 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);
0
elqueso101 27 czerwiec 2017, 19:34

Oto uogólniona funkcja, add, która akceptuje nazwę pola i obiekt wartości i mapuje je w obiekcie result, który może być mapowany w tablicy.

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]));
0
ryanjduffy 27 czerwiec 2017, 15:52

Możesz użyć mapy Hash (np. "btc-usd '= & gt; {nazwa:" bitcoin ", ...} ), aby utworzyć nowe obiekty. Ta hashmap może być łatwo konwertowana na tablicę.

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.

0
Jonas Wilms 27 czerwiec 2017, 15:42