在Javascript中使用索引键值JSON创建新数组

时间:2017-12-20 15:09:07

标签: javascript jquery json

我有一个像这样的JSON:

{
  "codeA": {
    "USD": 125.648
  },
  "codeB": {
    "USD": 654.547
  },
  "codeC": {
    "USD": 132.45
  }
}

我在API调用成功后填入新数组:

then(function successCallback(response) {
  var responsePrice = response.data; 
}

我想填充这样的数组:

var pricesCode = 
  pricesCode[0].code = codeA;
  pricesCode[0].currency = USD;
  pricesCode[0].price = 125.648;

我正在使用jQuery $.each函数

$.each(responsePrice, function(key, value) {
    priceCode.push({
        currency: key,
        price: value
    });
});
console.log(priceCode);

但我得到的结果是:

 priceCode[currency[0] = codeA, price[0] = USD, object undefined]

有人可以向我展示正确的代码或类似问题。非常感谢。

3 个答案:

答案 0 :(得分:1)

您可以合并Object.keys()Array.prototype.reduce()来实现这一目标。请参阅以下内容。

var responsePrice = {
  "codeA": {
    "USD": 125.648
  },
  "codeB": {
    "USD": 654.547
  },
  "codeC": {
    "USD": 132.45
  }
}

var pricesCode = Object.keys(responsePrice).reduce(function(acc, code) {
  var currency = Object.keys(responsePrice[code])[0];
  var obj = {
    code,
    currency,
    price: responsePrice[code][currency]
  }
  acc.push(obj);
  return acc;
}, [])

console.log(pricesCode[0].code);
console.log(pricesCode[0].currency);
console.log(pricesCode[0].price);

答案 1 :(得分:0)

执行此操作以获取包含所需数据的comlete数组:

let data = {
    "codeA": {
        "USD": 125.648
    },
    "codeB": {
        "USD": 654.547
    },
    "codeC": {
        "USD": 132.45
    }
};

console.log(
  Object.getOwnPropertyNames(data).map(code => {
    return Object.getOwnPropertyNames(data[code]).map(x => {
      return {
        code,
        currency: x,
        price: data[code][x]
      }
    })
  }).reduce((result, arr) => result.concat(arr), [])  
)

答案 2 :(得分:0)

可能有很多方法可以实现这一点,很快我想出了这个:

function gValue (obj){ return obj[Object.keys(obj)]};
function gKey (obj){ return Object.keys(obj)[0]};
var pricesCode = [];

$.each(responsePrice, function (key, obj) 
   {
        pricesCode.push({code: key, currency: gKey(obj), price:gValue(obj) });
   });

请检查您正在使用的变量名称(pricesCode与priceCode)