集体记忆
lodash.js->Array->difference
用法
返回一个去重后的数组,每个值不蕴含在其余数组参数中。后果值的程序是由第一个数组中的程序确定。
例子
_.difference([1,2,3],[3],[1,5]) //==>[2];
源码了解
difference(array, values, iteratee, comparator) { var index = -1, includes = arrayIncludes, isCommon = true, length = array.length, result = [], valuesLength = values.length; if (!length) { return result; } if (iteratee) { values = arrayMap(values, baseUnary(iteratee)); } if (comparator) { includes = arrayIncludesWith; isCommon = false; } else if (values.length >= LARGE_ARRAY_SIZE) { includes = cacheHas; isCommon = false; values = new SetCache(values); } outer: while (++index < length) { var value = array[index], computed = iteratee ? iteratee(value) : value; if (isCommon && computed === computed) { var valuesIndex = valuesLength; while (valuesIndex--) { if (values[valuesIndex] === computed) { continue outer; } } result.push(value); } else if (!includes(values, computed, comparator)) { result.push(value); } } return result; } 1.外围代码 outer: while (++index < length) { var value = array[index], computed = iteratee ? iteratee(value) : value; if (isCommon && computed === computed) { var valuesIndex = valuesLength; while (valuesIndex--) { if (values[valuesIndex] === computed) { continue outer; } } result.push(value); } else if (!includes(values, computed, comparator)) { result.push(value); } } return result; `思路:`将除array之外的数组参数合并去重,失去values,再应用includes办法,判断array中的元素是否存在于values中,若不存在行将value放进新数组result中,最初返回result。
延申
假如有一需要,重点展现本月在本年没有呈现过的新呈现的天气类型:difference(month12,month1,month2.....);