循环通过两个长度不同的数组

时间:2015-11-20 13:39:00

标签: javascript arrays arraylist while-loop

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

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

newArray的长度应与secondArr相同,因为它长于arr。如果在arr newArray中找不到任何值,则应在secondArr的情况下获取当前索引的子数组,并使用[1]获取最接近的前一个数组的子数据arr。例如:在'250'中找到270''280'secondArr时,他们都应该从arr获得['fd', 250],因为arr中的'250'{{1} } '250'[1]中前一个索引与'secondArr'中数字字符循环索引最接近的值

arr

所以我希望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] ], ] arr

2 个答案:

答案 0 :(得分: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>');
&#13;
&#13;
&#13;

答案 1 :(得分:-1)

在你的while循环中,你以i = secondArr.length开头,它大于arr.length。因此你的arr [i] [1]会抛出一个TypeError。