Javascript-创建并填充包含子数组的关联数组

时间:2018-11-05 17:20:56

标签: javascript

我正在尝试整理一些数据。我想填充一个包含子数组的数组,例如,我有一些要遍历的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);
  }
}

2 个答案:

答案 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;
    },{});
}