array/difference.jsjavascript
/**
 * 返回首个数组中未出现在其余数组里的唯一值。
 * @function difference
 * @memberof module:array
 * @param {Array} array 基准数组
 * @param {...Array} others 用于排除值的数组
 * @returns {Array} 差集数组
 * @throws {TypeError} 任一参数不是数组时抛出
 */
function difference(array, ...others) {
  if (!Array.isArray(array) || others.some(item => !Array.isArray(item))) {
    throw new TypeError('all arguments must be arrays')
  }
  const excluded = new Set(others.flat())
  return [...new Set(array.filter(value => !excluded.has(value)))]
}

export default difference