【问题标题】:Looping through two arrays having different lengths遍历两个长度不同的数组
【发布时间】:2016-02-23 00:37:05
【问题描述】:

我有两个数组,一个的长度比第二个长。我通过比较父数组中每个数组的第一个索引[1] 中的数字来循环。如下面代码的 if 语句中所写。如果两个子数组中的数字相等,则将这些数组推送到新数组。

但由于 'secondArr' 数组比另一个数组长,如果在 'arr' 中找不到该数字,那么我应该得到最接近 [1] 索引值的子数组。

newArray 应该与 secondArr 具有相同的长度,因为它比 arr 长。当在arr 中找不到任何值时,newArray 应该在secondArr 的情况下获取当前索引的子数组,并在arr 中获取与[1] 最接近的先前数组的子数组。例如:当在secondArr 中找到'250'、'270''280' 时,它们都应该从arr 中得到['fd', 250],因为arr 中的'250' 在[1] 中具有'250',这是最接近的值arr 中的前一个索引到 'secondArr' 中的数字当前循环索引

var arr = [ 
            ['asd', 100],
            ['fde', 200],
            ['fd', 250],
            ['asd',300],
            ['fa', 340]
          ]
var secondArr = [
                   ['adzx', 100],
                   ['tre', 140],
                   ['vc', 200],
                   ['brt', 250],
                   ['azc', 270],
                   ['sfds', 280],
                   ['we', 300],
                   ['jyt',550]
                ]
var i = secondArr.length;

var newArr = []    

while(i--){
      //TODO if arr[i][1] != secondArr[i][1] then arr[i-1][1]
      if(arr[i][1] == secondArr[i][1]){
            newArr.push(
                [
                arr[i],
                secondArr[i]
                ]                
            )
      }
}

所以我希望newArray 等于:

newArray = [ 
        [   ['asd', 100],
            ['adzx', 100]
        ],
        [
            ['asd', 100],
            ['tre', 140]
        ],
        [
            ['fde', 200],
            ['vc', 200]
        ],
        [
            ['fd', 250],
            ['brt', 250]
        ],
        [
            ['fd', 250],
            ['azc', 270]
        ],
        [
            ['fd', 250],
            ['sfds', 280]
        ],
        [
            ['asd',300],
            ['we', 300]
        ],
        [
            ['fa', 340],
            ['jyt',550]
        ],
    ]

arrsecondArray 的当前情况下

【问题讨论】:

  • 那么你的问题是什么?
  • 原谅我,但我没有看到任何问题。在寻找什么?
  • 请添加一些示例解决方案数组。
  • 现在清楚了吗?你了解数组应该是什么样子吗?
  • @developer,感谢您添加的数组。很清楚,你想要什么。

标签: javascript arrays arraylist while-loop


【解决方案1】:

在您的 while 循环中,您从 i = secondArr.length 开始,它大于 arr.length。因此,您的 arr[i][1] 将引发 TypeError。

【讨论】:

    【解决方案2】:

    也许这个解决方案适合你。

    它正在利用左 (arr) 值比较的校正机制。

    var arr = [['asd', 100], ['fde', 200], ['fd', 250], ['asd', 300], ['fa', 340]],
        secondArr = [['adzx', 100], ['tre', 140], ['vc', 200], ['brt', 250], ['azc', 270], ['sfds', 280], ['we', 300], ['jyt', 550]],
        i = 0,
        result = secondArr.map(function (a) {
            while (i + 1 < arr.length && arr[i + 1][1] <= a[1]) {
                i++;
            }
            return [arr[i], a];
        });
    document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-23
      • 2015-02-21
      • 1970-01-01
      • 1970-01-01
      • 2016-12-07
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多