array/intersection.jsjavascript
/**
* 返回所有数组共有的唯一值。
* @function intersection
* @memberof module:array
* @param {Array} array 基准数组
* @param {...Array} others 参与比较的其他数组
* @returns {Array} 交集数组
* @throws {TypeError} 任一参数不是数组时抛出
*/
function intersection(array, ...others) {
if (!Array.isArray(array) || others.some(item => !Array.isArray(item))) {
throw new TypeError('all arguments must be arrays')
}
if (others.length === 0) return [...new Set(array)]
const sets = others.map(item => new Set(item))
return [...new Set(array)].filter(value => sets.every(set => set.has(value)))
}
export default intersection