我正在尝试用JavaScript制作我自己的Set()方法.但是得到了意想不到的结果



我有点想为数组中的唯一元素创建自己的set((方法作为mySet((。但是输出错误。帮帮我。

let arr = [1,2,3,4,5,2,8,1,3,1]
function mySet(arr){
let mapObj = {}
let newArr = []
for (let i = 0; i <arr.length; i++) {
if(mapObj[arr[i]]){
//skip
}else{
mapObj[arr[i]]=i
newArr.push(arr[i])
}
}
return newArr;
}
console.log(mySet(arr)) //i wanted [1,2,3,4,5,8] getting  [1,2,3,4,5,8,1] 

您需要对象的truthy值。在这种情况下,您可以使用true

该检查返回的结果为零(第一个索引(,与未为属性赋值的结果相同。

function mySet(arr) {
let mapObj = {}
let newArr = []
for (let i = 0; i < arr.length; i++) {
if (!mapObj[arr[i]]) {
mapObj[arr[i]] = true;
newArr.push(arr[i])
}
}
return newArr;
}
let arr = [1, 2, 3, 4, 5, 2, 8, 1, 3, 1]
console.log(mySet(arr));

mapObj[arr[i]]=i分配当前索引。

if(mapObj[arr[i]]){将该值视为布尔值。

1的第一个索引出现在0处。

所以你说mapObj[1] = 0false

您需要指定true而不是i

最新更新