1. 程式人生 > >前端演算法:給定兩個陣列,編寫一個函式來計算它們的交集(兩個陣列的交叉點)

前端演算法:給定兩個陣列,編寫一個函式來計算它們的交集(兩個陣列的交叉點)

給定兩個陣列,編寫一個函式來計算它們的交集。

例1:
輸入: nums1 = [1,2,2,1],nums2 = [2,2]
輸出:[2,2]

例2:
輸入: nums1 = [4,9,5],nums2 = [9,4,9,8,4]
輸出:[4,9]

注意:
結果中的每個元素應該出現在兩個陣列中顯示的次數。
結果可以是任何順序。

<script>
    var intersect = function(nums1, nums2) {
    var store = nums1.reduce(function(map, n) { // https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
        map[n] = (map[n] + 1) || 1; //記錄nums1某個值出現的次數(1、2、3)
        return map;
    }, {});
    return nums2.filter(function(n) {// filter()把傳入的函式依次作用於每個元素,然後根據返回值是true還是false決定保留還是丟棄該元素
        if (store[n]) {
            store[n]--;// 改變陣列的值相當於nums1[0] = nums1[0] - 1
            return true;
        } else {
            return false;
        }
    });
};
var nums1 = [4,9,5,7,7,7],nums2 = [9,4,9,5,8,7,7,7];
console.log(intersect(nums1,nums2));
</script>