【问题标题】:find punctual element in array with two elements javascript在具有两个元素javascript的数组中查找准时元素
【发布时间】:2015-07-20 14:54:51
【问题描述】:

我有下一个情况:

1)。一个数组,月份从 1 到 12,值为 0:

var months = [[1,0], [2,0], [3,0], [4,0], [5,0], [6,0], [7,0], [8,0],
              [9,0], [10,0], [11,0], [12,0], [13,0]];

2)。另一个小数组,表示用户连接到网站的时间:

 data1 = [[1, 40], [2, 50]]

我想要做的是重叠两个数组,遍历数组 data1 中的数组月份中的值。

所以结果必须是:

data1 = [[1,40], [2,50], [3,0], [4,0], [5,0], [6,0], [7,0], [8,0], 
         [9,0], [10,0], [11,0], [12,0], [13,0]];

找不到访问每个数组的第一个元素的方法(以月计),这是我迄今为止尝试过的:

 for (var x = months.length - 1; x >= 0; x--) {
    for (var j = monthConn.length - 1; j >= 0; j--) {
        console.log(monthConn[j]); 
        for (var p = 0; p < monthConn[j].length; p++) {
           console.log(monthConn[j][p]);
        };
        // console.log(months[x].indexOf(monthConn[j]));
     };
    };

对于我在 console.log 中得到的信息:

["5", "2"]
5
2

我该怎么做?

【问题讨论】:

  • 你可以将months作为一个对象,将month作为key,value作为value
  • @depperm 我需要保持原样,因为我正在修改一个制作统计图的插件:s 并且它使用数组
  • 可能没有太大关系:只是想知道有 13 个元素,你说 12
  • @vinayakj 12 个元素,因为每个元素代表一个月,13 是在图表中留一个空格,所以它永远是 0
  • 好的..明白了..这很重要..所以在比较时不需要比较最后一个元素。

标签: javascript arrays multidimensional-array array-map


【解决方案1】:

您只需要遍历data1,并访问n-1-th 月份的位置,其中n 是每个条目的第一个元素:

var months = [[1,0], [2,0], [3,0], [4,0], [5,0], [6,0], [7,0], [8,0], [9,0], [10,0], [11,0], [12,0], [13,0]]

var data1 = [[1, 40], [2, 50]]

// clone months array
var overlapped = months.slice()

// for every data1 value, update corresponding month
data1.forEach(function(monthData){
  overlapped[monthData[0]-1][1] = monthData[1]
})

// et voilá
console.log(overlapped)

fiddle

【讨论】:

  • 很好地使用.slice 来克隆数组,并且也有重叠的逻辑
  • 我现在知道如何使用切片功能了,很有用
【解决方案2】:
var months = [[1,0], [2,0], [3,0], [4,0], [5,0], [6,0], [7,0],
              [8,0], [9,0], [10,0], [11,0], [12,0], [13,0]];
var monthConn = [[1,40],[2,50]];
var data = [];
for (var x = 0, l = months.length; x < l; x++) {
     data[x] = [0,0];
    for (var j = monthConn.length - 1; j >= 0; j--) {
           data[x][0] = months[x][0];
           data[x][1] = months[x][1];
           if(monthConn[j][0] == data[x][0]){
                  data[x][1]=monthConn[j][1];
                  break;
           }
    }
}
console.dir(months)
console.dir(data)

【讨论】:

  • 嘿,谢谢。它只在数据数组中注册 [1,40] 而不是 [2,50]
  • 顺便说一句,你想在单独的数组中输出数据还是应该修改相同的months数组
  • 在另一个数组中,所以我继续使用其他用户的连接进行此操作
  • 我认为你应该选择moonwave99的答案,看起来非常小而且逻辑很好。
猜你喜欢
  • 2019-12-06
  • 1970-01-01
  • 2021-04-19
  • 1970-01-01
  • 1970-01-01
  • 2020-03-26
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多