我正在尝试整理一些数据。我想填充一个包含子数组的数组,例如,我有一些要遍历的json数据:
{
"name": "name1",
"prices": "209.67"
},
{
"name": "name1",
"prices": "350"
},
{
"name": "name2",
"price": "195.97"
},
我想创建一个最终看起来像以下的数组:
myArray['name1']prices[0] = 209.67,
prices[1] = 350,
['name2']prices[0] = 195.97
我认为下面的代码可以实现我想要的功能,但是它不起作用。它引发异常。似乎没有意识到价格是给定主数组索引的数组。相反,价格与名称显示在同一级别。我希望给定名称的主数组包含价格的内部数组。有人有人知道如何修改才能使它起作用吗?
function doStuff() {
var cryptoData = getData();
var datasetValues = {};
datasetValues.names = [];
datasetValues.names.prices = [];
for (var result = 0; result < cryptoData.length; result++) {
var data = cryptoData[result];
if (datasetValues.names.indexOf(data.cryptoname) === -1)
{
datasetValues.names.push(data.cryptoname);
}
// This works
//datasetValues.names.prices.push(data.prices);
// This doesn't!
datasetValues.cryptoNames[data.cryptoname].prices.push(data.prices);
}
}
答案 0 :(得分:2)
您可以通过使用对象来缩小数组,如果未设置该属性,则采用默认对象。然后推价格。
var data = [{ name: "name1", price: "209.67" }, { name: "name1", price: "350" }, { name: "name2", price: "195.97" }],
result = data.reduce((r, { name, price }) => {
r[name] = r[name] || { name, prices: [] };
r[name].prices.push(+price);
return r;
}, Object.create(null));
console.log(result);
答案 1 :(得分:1)
尝试
function parseData(input){
return input.reduce(function(o,i){
o[i.name] = {};
if(!o[i.name]['prices']){
o[i.name]['prices'] = [];
}
o[i.name]['prices'].push(i.prices);
return o;
},{});
}