数组去重问题?
实现数组去重并对重复的元素进行标记,如果重复 "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个回答

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);
回复

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