【问题标题】:Transform JavaScript Array, create tabular view转换 JavaScript 数组,创建表格视图
【发布时间】:2015-07-13 07:31:31
【问题描述】:

我已经搜索过类似的问题并试图自己解决问题,但我的编程能力很弱。

我有一个类似的数组:

[{"city": "Amsterdam", "year": "2013", "amount": "450"},
 {"city": "Rotterdam", "year": "2013", "amount": "620"},
 {"city": "Geneva",    "year": "2014", "amount": "530"},
 {"city": "Rotterdam", "year": "2015", "amount": "350"}]

我想使用“城市”和“年份”对其进行转换以获得“金额”。例如。鹿特丹:[620,N/A,350]。 “N/A”,因为缺少 2014 年的值。 我正在检查地图功能等,但我的技能很弱。 最后,我想创建一个包含年份(水平)和城市(垂直)的表格视图。 请指教。谢谢

【问题讨论】:

  • 向我们展示您尝试过的一些代码。
  • 试试看reduce函数
  • @mplungjan 你有一只鹰眼,但我已经编辑了帖子并更正了它。修改尚未获得批准。
  • @ mplugjan:这只是一个复制粘贴错误。数组有效。用 json 验证器检查。不过谢谢。
  • @cezar 我知道 - 我已经批准给你代表,我不明白为什么我们需要另一个批准者,而我本来可以改进和保存。

标签: javascript arrays transform tabular


【解决方案1】:

我认为这不是编程技能,而是算法技能。这是一个做你想做的代码:

var amounts = [{"city": "Amsterdam", "year": "2013", "amount": "450"},{"city": "Rotterdam", "year": "2013", "amount": "620"},{"city": "Geneva", "year": "2014", "amount": "530"},{"city": "Rotterdam", "year": "2015", "amount": "350"}],
    formattedAmounts = {}
;
             
for (var i = 0; i < amounts.length; i++) {
    var amount = amounts[i];
  
    if (undefined === formattedAmounts[amount.city]) {
        formattedAmounts[amount.city] = {};
    }

    formattedAmounts[amount.city][amount.year] = amount.amount;
}

console.log(JSON.stringify(formattedAmounts));
alert(JSON.stringify(formattedAmounts));

function getCityAmount(city) {
    var years = [2013, 2014, 2015],
        cityAmounts = []
    ;

    for (var i = 0; i < years.length; i++) {
        cityAmounts.push(
            formattedAmounts[city] && formattedAmounts[city][years[i]]
                ?  formattedAmounts[city][years[i]]
                : 'N/A'
        );
    }

    return cityAmounts;
}

console.log(JSON.stringify(getCityAmount('Amsterdam')));
alert(JSON.stringify(getCityAmount('Amsterdam')));

function getCitiesAmounts() {
    var citiesAmounts = [];

    for (var i = 0; i < amounts.length; i++) {
        citiesAmounts.push(getCityAmount(amounts[i].city));
    }

    return citiesAmounts;
}

console.log(JSON.stringify(getCitiesAmounts()));
alert(JSON.stringify(getCitiesAmounts()));

【讨论】:

  • 我将 sn-p 更新为您要求的格式。
  • 非常感谢。它工作正常,但是当组合丢失时,我如何获得“NA”?我想获得与月数相同的金额,即使月份的值缺失。
  • @Gnucki:很抱歉再次与您联系,但我未能获得所有城市的数组。
  • @Gnucki:很抱歉再次与您联系,但我没有设法获得所有城市的数组。首先,我得到一个不同的城市列表。完毕。但我没有设法得到类似 var xyz =[[a,b,c,d], [e,f,g,h]....] 的东西。根据排序的城市列表排序。我试图改变你的代码。谢谢
  • 你问我什么不清楚。给我一个你想要的真实例子。您可以将其添加到您的问题中,并在完成后发表评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-15
  • 1970-01-01
  • 1970-01-01
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多