如何通过填充零来使两个数组匹配?

时间:2016-09-07 19:39:00

标签: javascript arrays

在Javascript中,我在这里抓取结果,并将它们分为两个变量:ticks和s1。

var viewModel = @Html.Raw(Json.Encode(Model));
var items = viewModel.Date1;
var items2 = viewModel.Date2;
var newCount;
var ticks = [];
var s1 = [];
var colors = [];
for (var i = 0; i < items.length; i++) {            
    newCount = items[i].theCount / items2[i].theCount * 100;
    ticks.push(items[i].theCycle);
    s1.push(newCount);
    if (newCount < 98)
        colors.push("#FF2F2F");
    else
        colors.push("#00749F");
}

结果如下:

b.active_serv!= 0 - 项目

的位置
Cycle   Count
1       823
6       530
7       475
9       962
10      591
11      121
13      751
15      716
50      133
100     39 

它们的总数(没有那个where子句)-items2

Cycle   Count
1       833
6       532
7       492
9       967
10      611
11      121
13      767
14      37
15      816
16      71
19      3
21      101
23      11
50      133
100     39 

如您所见,总计(items2)中有更多周期,然后是b.active_serv!= 0(项目)。我需要修复项目以匹配items2,因为要获得我正在做的百分比:

newCount = items[i].theCount / items2[i].theCount * 100;

如果周期数不匹配(或缺失),如何查看所有变量项,并在该数组中的正确位置添加零。

1 个答案:

答案 0 :(得分:1)

如果item是包含rowtheCycle成员的theCount个对象的数组,则会返回一个行数组,其中的项目没有匹配theCycle item2中的成员被{theCycle:0, theCount:0}

取代
items = items2.map( row => 
                       //is there a matching row in items?
                       items.filter( r => r.theCycle == row.theCycle).length ==  0 ? 
                      //if not, fill with zeros
                      {theCycle:0, theCount:0} : 
                      //if there is, return the items' row
                      items.filter( r => r.theCycle == row.theCycle)[0] );

当然,这假设r.theCycle是唯一标识符。

例如,如果我们有这两个数组:

var items = [{theCycle:2, theCount:2}, {theCycle:1, theCount:1}];
var items2 = [{theCycle:2, theCount:2}, {theCycle:1, theCount:1}, {theCycle:3, theCount:3} ];

我们应该获得以下结果:

[{theCycle:2,theCount:2},{theCycle:1,theCount:1},{theCycle:0,theCount:0}]

items中第三个不存在的对象被零替换。