我有一个像这样的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]
有人可以向我展示正确的代码或类似问题。非常感谢。
答案 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)