从JavaScript中的数组中移除任何数字/元素的奇数出现
假设我们有一个这样的数字数组-
const arr = [1, 6, 3, 1, 3, 1, 6, 3];
我们需要编写一个JavaScript函数,该函数接受一个这样的数组作为第一个和唯一的参数。然后,该函数应在数组中查找出现奇数次(仅一次除外)的所有此类数字。
例如,
在上面的数组中,数字1和3都出现3次(奇数),因此我们的函数应删除这两个数字的第三次出现。
并且输出数组应该看起来像-
const output = [1, 6, 3, 1, 3, 6];
我们将准备一个哈希图以跟踪每个数字的出现,最后我们将遍历该映射以删除出现该奇数次的该数字的最后一次出现。
映射中的每个键都将包含一个数组值,其中的第一个元素是该元素出现的次数,第二个元素是该元素出现的最后一个索引。
示例
为此的代码将是-
const arr = [1, 6, 3, 1, 3, 1, 6, 3]; const removeOddOccurence = (arr =[]) => { //保持原始数组不变 const copy = arr.slice(); const map = {}; arr.forEach((num, ind) => { if(map.hasOwnProperty(num)){ map[num][0]++; map[num][1] = ind; }else{ map[num] = [1, ind]; }; }); for(const key in map){ const [freq, index] = map[key]; if(freq !== 1 && freq % 2 === 1){ copy.splice(index, 1, ''); }; }; return copy.filter(el => el !== ''); }; console.log(removeOddOccurence(arr));输出结果
控制台中的输出将是-
[1, 6, 3, 1, 3, 6]