数组去重问题?

作者站长头像
站长
· 阅读数 19

实现数组去重并对重复的元素进行标记,如果重复 "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
    }
]
回复
1个回答
avatar
test
2024-06-24

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);
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容