当前位置: 首页 > 知识库问答 >
问题:

javascript - 数组去重问题?

卫诚
2023-11-23

实现数组去重并对重复的元素进行标记,如果重复 "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    }]

共有4个答案

臧令
2023-11-23

使用了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;}
陶文林
2023-11-23

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}))

阳德润
2023-11-23

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);
徐卓
2023-11-23

你的代码标记所有元素为 "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引擎在实现这个方法的时候会遍历数组直到找到目标为止。所