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;
 | |
| };
 |