实现数组去重并对重复的元素进行标记,如果重复 "isRepeat": true",否则为 "isRepeat": false"
但是函数实际输出的元素都标记为 "isRepeat": true"
let arr=[ "11", "22","11","22","11","22","66"] norepeat(arr) { console.log('arr',arr) const uniqueArr = [...new Set(arr)] const result = [] const tempArr = [] for (let i = 0; i < arr.length; i++) { if (arr.find(item => item === uniqueArr[i] )) { tempArr.push(uniqueArr[i]) if(uniqueArr.some(item => item === tempArr[i])){ result.push({ value: uniqueArr[i], isPublic: true }); }else { result.push({ value: uniqueArr[i], isPublic: false }); } } } return result }//期望[ { "value": "11", "isPublic": true }, { "value": "22", "isPublic": true }, { "value": "66", "isPublic": false }]//实际[ { "value": "11", "isPublic": true }, { "value": "22", "isPublic": true }, { "value": "66", "isPublic": true }]
使用了lastIndexOf,仅供参考。
let arr=[ "11", "22","11","22","11","22","66"]function norepeat(arr) { const result = [] const map = [] for(let i = 0; i < arr.length; i++){ if (map.includes(arr[i])) { continue; } else { map.push(arr[i]) } let index = arr.lastIndexOf(arr[i]) if (index === i){ result.push({ value: arr[i], isRepeat: false }) } else { result.push({ value: arr[i], isRepeat: true }) } } return result;}
用map
可以区分字符数字和真实的number
,如果不需要区分用{}
就可以了var translate = arr => [...arr.reduce((map, v) => map.set(v, map.has(v)),new Map).entries()].map(([v,b]) => ({value: v, isRepeat: b}))
array.some
方法只要数组内容有一个返回为true,它就会返回true,你这块的判断有问题。
如果是我的话,我会这样写:
const arr = [ "11", "22","11","22","11","22","66"]function norepeat(arr) { const result = []; arr.forEach(i=>{ const curResItem = result.find(r=>r.value===i); if (curResItem) { curResItem.isRepeat = true; } else { result.push({ value: i, isRepeat: false, }); } }) return result;} const res = norepeat(arr);
你的代码标记所有元素为 "isRepeat": true 是因为在你的逻辑中,每个元素都会被检查是否与新的 Set 中的元素匹配。由于你的输入数组中每个元素都至少与 Set 中的某个元素匹配一次(因为它们都是唯一的),所以你的代码将所有元素都标记为 "isRepeat": true。
如果你想让 "isRepeat" 仅对重复的元素为 true,你需要找到一种方法来跟踪哪些元素之前已经出现过。在你的代码中,你已经使用了一个 tempArr 数组来存储遇到的元素,但是你的检查逻辑并不正确。
这是一个可能的改进:
function noRepeat(arr) { const uniqueArr = [...new Set(arr)]; const result = []; const tempArr = []; for (let i = 0; i < arr.length; i++) { if (tempArr.indexOf(arr[i]) !== -1) { result.push({ value: arr[i], isRepeat: true }); } else { tempArr.push(arr[i]); result.push({ value: arr[i], isRepeat: false }); } } return result;}
在这个改进的版本中,我使用了一个 tempArr 数组来存储已经遇到的元素。在检查一个元素是否重复时,我使用数组的 indexOf 方法来查找元素在 tempArr 数组中的索引。如果索引值不等于 -1(这意味着元素已经在 tempArr 数组中),那么我就知道这个元素是重复的,并且我将其标记为 "isRepeat": true。否则,我将元素添加到 tempArr 数组中,并将该元素标记为 "isRepeat": false。
本文向大家介绍详解javascript数组去重问题,包括了详解javascript数组去重问题的使用技巧和注意事项,需要的朋友参考一下 首先,我想到的是另建一个结果数组,用来存储原始数组中不重复的数据。遍历原始数组依次跟结果数组中的元素进行比较,检测是否重复。于是乎,我写出了如下代码A: 写完之后,忽然想起来前几天刚看的ECMAScript 5中的数组方法indexOf 可以检索数组元素。于是我又
本文向大家介绍javascript数组去重小结,包括了javascript数组去重小结的使用技巧和注意事项,需要的朋友参考一下 前言 最近为了换工作,准备下面试,开始回顾复习JavaScript相关的知识,昨天下午想到了数组去重的相关方法,干脆整理出几篇JavaScript算法文章,以备后用,此系列文章不定篇数,不定时间,想到哪写到哪,不保证正确性,不保证高效率,只是谈谈个人理解,如有错误,请诸位
本文向大家介绍javascript数组去重方法汇总,包括了javascript数组去重方法汇总的使用技巧和注意事项,需要的朋友参考一下 javascript数组去重方法汇总 其中第1种和第3种方法都用到了数组的indexOf方法。此方法的目的是寻找存入参数在数组中第一次出现的位置。很显然,js引擎在实现这个方法的时候会遍历数组直到找到目标为止。所以此函数会浪费掉很多时间。 而第2中方法用的是has
本文向大家介绍javascript数组去重方法分析,包括了javascript数组去重方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript数组去重方法。分享给大家供大家参考,具体如下: 方法一. 思路:创建一个新的空数组,循环遍历旧数组,用indexOf()方法,可以取得元素在数组中的位置,如果值为-1表示不存在。那么新数组用indexOf去获取老数组的每一个元素,
本文向大家介绍JavaScript数组去重的五种方法,包括了JavaScript数组去重的五种方法的使用技巧和注意事项,需要的朋友参考一下 javascript数组去重是一个比较常见的需求,解决方法也有很多种,网上都可以找到答案的,下面小编给大家整理了一份关于同类型的数组去重的方法,先给大家介绍下简单实现思路。 思路: 遍历数组,一一比较,比较到相同的就删除后面的 遍历数组,一一比较,比较到相同的
本文向大家介绍javascript数组去重的方法汇总,包括了javascript数组去重的方法汇总的使用技巧和注意事项,需要的朋友参考一下 四种算法来实现这个目的: 第一种: 第二种: 第二种改进版: 第三种: 其中第1种和第3种方法都用到了数组的indexOf方法。此方法的目的是寻找存入参数在数组中第一次出现的位置。很显然,js引擎在实现这个方法的时候会遍历数组直到找到目标为止。所