2017-04-16 21 views
-2

我有兩個數組(req[],res[])需要進行比較,差異應顯示在日誌中。爲此我使用for循環,但我想使用map來解決這個問題。如何實現映射而不是循環

注意:需要先對兩個數組進行排序。

for(var i=0;i<req.length;i++) 
{ 
    if(req[i]!==res[i]) 
    { 
     console.log('unmatched element : '+req[i]+' and '+res[i]); 
    } 
    else 
    { 
     continue; 
    } 
} 

如何我可以使用地圖使用像id或name屬性的一些既數組排序,然後兩個數組和打印錯誤與當匹配失敗的值進行比較?

+1

爲什麼要使用'map'此如果循環已經運作的? –

回答

0

要對數組進行排序,請使用Array.sort對數組進行排序。你傳遞一個排序函數。排序函數有兩個參數(A,B),並返回-1,如果a低於b,0,如果是相同的,如果1是a大於b

const arr = "akjdfgeknskhg".split(""); // create an array of characters 
arr.sort((a,b)=> a < b ? -1 : a > b ? 1 : 0); 

要使用的相匹配的報告創建一個數組您可以使用地圖來獲取arr中每個項目的一對一地圖。這樣做是爲了兩個數組首先檢查匹配和不匹配。第二,你不需要報告匹配,因爲這已經完成了,所以只需做不匹配,並傳遞一個空的,未定義的空字符串什麼都不重要。

然後過濾出空值,就完成了。

// 
 
    const arr1 = [1,2,5,67,8,4,32,392]; 
 
    const arr2 = [1,2,8,4,32,392,76,34,2,44]; 
 
    const resArr = [ 
 
     ...arr1.map(item => item + (arr2.includes(item) ? " arr1 matched arr2. " : " arr1 unmatched")), 
 
     ...arr2.map(item => !arr1.includes(item) ? item + " arr2 unmatched. " : "") 
 
    ].filter(item => item !== ""); 
 
    console.log(resArr);