42 lines
		
	
	
		
			780 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			780 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict';
 | 
						|
 | 
						|
const internals = {};
 | 
						|
 | 
						|
 | 
						|
module.exports = function (array1, array2, options = {}) {
 | 
						|
 | 
						|
    if (!array1 ||
 | 
						|
        !array2) {
 | 
						|
 | 
						|
        return (options.first ? null : []);
 | 
						|
    }
 | 
						|
 | 
						|
    const common = [];
 | 
						|
    const hash = (Array.isArray(array1) ? new Set(array1) : array1);
 | 
						|
    const found = new Set();
 | 
						|
    for (const value of array2) {
 | 
						|
        if (internals.has(hash, value) &&
 | 
						|
            !found.has(value)) {
 | 
						|
 | 
						|
            if (options.first) {
 | 
						|
                return value;
 | 
						|
            }
 | 
						|
 | 
						|
            common.push(value);
 | 
						|
            found.add(value);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    return (options.first ? null : common);
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
internals.has = function (ref, key) {
 | 
						|
 | 
						|
    if (typeof ref.has === 'function') {
 | 
						|
        return ref.has(key);
 | 
						|
    }
 | 
						|
 | 
						|
    return ref[key] !== undefined;
 | 
						|
};
 |