1.for循环 + indexOf() + push()
function goRepeat(arr) {
let newArr = [];
for (var i = 0; i < arr.length; i++) {
//将数组的每一项与新数组进行indexOf查询,若没有则添加进新数组,若有则不管
if (newArr.indexOf(arr[i]) == -1) {
//不包含该值则返回-1
newArr.push(arr[i]);
}
}
return newArr
}
2. for循环 + indexOf() + push()
function goRepeat(arr) {
let newArr = [];
for (var i = 0; i < arr.length; i++) {
//如果当前数组的第i项在当前数组中第一次出现的位置不是i,
//那么表示第i项是重复的,忽略掉。否则存入结果数组
if (arr.indexOf(arr[i]) == i) {
newArr.push(arr[i]);
}
}
return newArr;
}
3. for循环 + sort() + push()
function goRepeat(arr) {
// 先将数组进行排序,目的是将相同的元素放在一起
let arrSort = arr.sort();
let newArr = [];
for (let i = 0; i < arrSort.length; i++) {
// 判断两两之间的元素是否相等。不等则加入新数组,相等则不管
if (arrSort[i] != arrSort[i + 1]) {
newArr.push(arrSort[i]);
}
}
return newArr;
}
4. 双重for循环 + splice()
function goRepeat(arr) {
let len = arr.length
// 尽量不改变原数组
let newArr = [...arr]
for (let i = 0; i < len; i++) {
for (let j = i + 1; j < len; j++) {
// 判断其余数组元素与第一个for循环的当前数组元素是否相等,相等则删除元素,
// 防止数组塌陷,需要进行--操作
if (newArr[i] === newArr[j]) {
newArr.splice(i, 1);
len--;
j--;
}
}
}
return newArr
}
5. es6剩余运算符'... ' + new Set()
function goRepeat(arr) {
let newArr = Array.from(new Set(arr))
return newArr
}
6. includes() + push()
function goRepeat(arr) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (!newArr.includes(arr[i])) {
//检测新数组是否有某个值,无则添加,有则不管
newArr.push(arr[i]);
}
}
return newArr;
}
7. hasOwnProperty() + filter() + typeof
function goRepeat(arr) {
var obj = {};
return arr.filter(function (item, index, arr) {
//将值的类型和值当作对象属性,不存在则添加属性,存在则不管
return obj.hasOwnProperty(typeof item + item)
? false
: (obj[typeof item + item] = true);
});
}
8. indexOf() + filter()
function goRepeat(arr) {
return arr.filter(function (item, index, arr) {
//当前元素在原始数组中的第一个索引===当前索引值,则返回当前元素
return arr.indexOf(item) === index;
});
}
9. reduce() + includes()
function goRepeat(arr) {
return arr.reduce((prev,cur) => prev.includes(cur) ? prev : [...prev,cur],[]);
}
网友评论