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