我有两个数组,一个长度比第二个长。我通过比较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
答案 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;
答案 1 :(得分:-1)
在你的while循环中,你以i = secondArr.length开头,它大于arr.length。因此你的arr [i] [1]会抛出一个TypeError。