Javascript 通过角度指令获得按顺序显示的月份

Javascript 通过角度指令获得按顺序显示的月份,javascript,angularjs,iterator,angularjs-directive,Javascript,Angularjs,Iterator,Angularjs Directive,我正在尝试使用Angular的ng repeat指令构建一个表,该指令显示两年的数据: -------------------------------------------------------- January | jan text this year | jan text last year February | feb text this year | feb text last year March | march text this year |

我正在尝试使用Angular的ng repeat指令构建一个表,该指令显示两年的数据:

--------------------------------------------------------
January  |  jan text this year   |  jan text last year  
February |  feb text this year   |  feb text last year  
March    |  march text this year |  march text last year
--------------------------------------------------------
我最终得到的是:

--------------------------------------------------------
January  |  feb text this year   |  feb text last year  
February |  jan text this year   |  jan text last year  
March    |  march text this year |  march text last year
--------------------------------------------------------
我有一个有两年数据的对象

$scope.data = {
    thisYear: {
        January: 'jan text this year',
        February: 'feb text this year',
        March: 'march text this year'
        // etc..
    },
    lastYear: {
        January: 'jan text last year',
        February: 'feb text last year',
        March: 'march text last year'
        // etc..
    }
};
以及一个简单的数组:
$scope.months=['一月'、'二月'、'三月']

这几个月很轻松,工作也很好:

<div ng-repeat="month in months">{{ month }}</div>
{{month}
但是,数据并没有按预期工作:

<div ng-repeat="d in data.thisYear">{{ d || "none" }}</div>
{{d| |“无”}
数据按字母顺序迭代,这意味着该月的数据没有对齐。因为角度数据绑定不允许使用基元类型,所以我无法用多维数组解决它


我觉得我忽略了一些愚蠢和琐碎的事情,我知道我可以在Angular之外轻松地完成这件事,但我正试图在他们的系统内工作。也许是一个自定义指令?

难道您不能更改数据结构,这样您就可以在一个包含所有所需信息的数组上进行迭代吗?大概是这样的:

$scope.data = [
    { month: 'January', thisYear: 'jan text this year', lastYear: 'jan text last year' },
    { month: 'February', thisYear: 'feb text this year', lastYear: 'feb text last year' },
    { month: 'March', thisYear: 'mar text this year', lastYear: 'mar text last year' },
    // etc..
]; 

您可以通过循环月份来完成每一列

<div ng-repeat="month in months">{{ data.lastYear[month] || "none" }}</div>

您关于无法使用数组执行此操作的评论偏离了轨道。对象没有顺序,而数组有顺序

关于对象/数组偏离轨道的说法你是对的。尽管我对不能使用数组感到特别困惑,因为有一个类似的问题谈到不能在手柄中使用基本类型。我更喜欢当前的数据结构,因为重复次数明显减少,但我欣赏另一种观点。不要让JSON重复愚弄你……在编写angular应用程序时,拥有对象属性非常有用。我针对您的情况提出的解决方案对于更大的数据来说不是很容易扩展。比如说,在新年之后发生了什么,这真的很好。虽然我这样做是因为我必须将所有数据相加,才能得到每个月的总值,但我最终使用了数组并创建了一个Array.sum()方法的原型,它似乎比遍历对象、检查正确的年份和月份,然后进行相加更有效。我认为数据结构的一些推理正在丢失,因为我将问题归结为发布的最基本元素。
[{year: 2013, months:[{month: 'val', text:'val'},{month: 'val', text:'val'}....]},{ year: 2012:.....}]