从旧数组为数组分配新的键名

时间:2018-05-07 09:14:50

标签: javascript ecmascript-6

我想将货币数据转换为新数组以用于我的货币转换。但我需要一种不同的阵列。 我想创建一个如下所示的数组:

json文件中的数组如下所示:

{
   "eur":{
      "code":"EUR",
      "alphaCode":"EUR",
      "numericCode":"978",
      "name":"Euro",
      "rate":0.83563518721183,
      "date":"Mon, 7 May 2018 00:00:01 GMT"
   },
   "gbp":{
      "code":"GBP",
      "alphaCode":"GBP",
      "numericCode":"826",
      "name":"U.K. Pound Sterling",
      "rate":0.73757713865121,
      "date":"Mon, 7 May 2018 00:00:01 GMT"
   },
etc...
 }

我想让它看起来像:

   {
    rates: {
        AED: 3.672538,
        AFN: 66.809999,
        ALL: 125.716501,
        AMD: 484.902502,
        ANG: 1.788575,
        AOA: 135.295998,
        ARS: 9.750101,
        AUD: 1.390866,
        /* ... */
    }
}

我使用的代码:

$.getJSON(
      'http://www.floatrates.com/daily/usd.json',
      function (data) {
        var newRates = [];
        Object.getOwnPropertyNames(data).forEach(
          function (val, idx, array) {
            var newObj = Object.assign(
              { val },
              { '': data[val].rate });
            newRates.push(newObj);
          }
        );
        console.log(newRates);
    )

3 个答案:

答案 0 :(得分:1)

从我看到的情况来看,只需直接分配就可以获得你想要的东西,试试这个:

$.getJSON(
    'http://www.floatrates.com/daily/usd.json',
    function (data) {
        var newRates = {'rates': []}; // <--
        Object.getOwnPropertyNames(data).forEach(
            function (val, idx, array) {
                newRates['rates'][val] = data[val].rate;
            }
        );
        console.log(newRates);
    }
)

答案 1 :(得分:1)

您可以通过映射单个对象并将其分配给单个对象来构建对象。

&#13;
&#13;
$.getJSON(
    'http://www.floatrates.com/daily/usd.json',
    function(data) {
        var result = Object.assign(
                ...Object
                    .entries(data)
                    .map(([key, { rate }]) => ({ [key.toUpperCase()]: rate }))
            );

        console.log(result);
    }
);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

  

我想创建一个看起来像这样的数组

正如Quentin所说,那不是一个数组,它是一个非数组对象。 (数组也是对象,因此&#34;非数组&#34;位。)

从您进入代码的结果中可以清楚地看出data 已经的格式是您所说的rates格式;直接使用它:

var obj = {rates: data};

以下是证据:

&#13;
&#13;
console.log("Be sure to scroll down");

var data = {
  AED: 3.672538,
  AFN: 66.809999,
  ALL: 125.716501,
  AMD: 484.902502,
  ANG: 1.788575,
  AOA: 135.295998,
  ARS: 9.750101,
  AUD: 1.390866,
  /* ... */
};

// Applying your code to it:
var newRates = [];
Object.getOwnPropertyNames(data).forEach(
  function (val, idx, array) {
    var newObj = Object.assign(
      { val },
      { '': data[val].rate });
    newRates.push(newObj);
  }
);
console.log(newRates);

// But instead, just use it directly
var newRates2 = {rates: data};
console.log(newRates2);
&#13;
.as-console-wrapper {
  max-height: 100% !important;
}
&#13;
&#13;
&#13;