#89 数组去重
-
0
编写一个函数
unique(arr)
,返回一个去除数组内重复的元素的数组。例如:unique([0, 1, 2, 2, 3, 3, 4]) // => [0, 1, 2, 3, 4] unique([0, 1, '1', '1', 2]) // => [0, 1, '1', 2]
-
0
const unique = (arr) => [...new Set(arr)]
-
1
const unique = (arr) => {
var item = typeof arr[0] === 'undefined' ? [] : [arr[0]];
for (var i=1; i<arr.length; i++) {
item.indexOf(arr[i]) === -1 && item.push(arr[i])
}return item;
}不用新特性写法
-
1
不使用
...
运算符,可以如下实现const unique = (arr) => Array.from(new Set(arr))
-
0
const unique = (arr) => {
let a = ''
for (var i = 0; i < arr.length; i ++) {
a = arr.indexOf(arr[i], i + 1)
if (a > -1) arr.splice(a, 1)
}
return arr
}本地验证可以,但为什么不能通过呢
-
0
@wucancheng
刚才看了一下,不用Array.form()直接用new Set()就能去重,请问Array.form()有什么其他的意义吗?
-
0
-
题目要求你返回的是一个去重后的数组,所以利用
Set
去重后,需要把Set
转为Array
。 -
那么怎么把
Set
转为Array
? -
使用简洁的扩展运算符
...
将[...new Set()]
返回 -
使用
Array.from
方法转数组返回
-
-
0
@wucancheng 啊~~要求返回数组啊,谢谢啦
-
1
这还有一个骚方法,利用Map的key值唯一:
const unique = (arr) => { const seen = new Map() return arr.filter((num) => !seen.has(num) && seen.set(num, 1)) }
使用对象也是一个道理:
const unique = (arr) => { const tmparr = [] const tmp = {} for (let i = 0, len = arr.length; i < len; i++) { if (!tmp.hasOwnProperty(arr[i])) { tmp[arr[i]] = 1 tmparr.push(arr[i]) } } return tmparr }
-
0
for(var i =0; i < arr.length; i++){
for(var j = i+1; j <arr.length;j++){
if(arr[i] === arr[j]){
arr.splice(j,1);
}
}} return arr
-
0
const unique = (arr) => {
if (Object.prototype.toString.call(arr) !== '[object Array]') return;
let set = new Set(arr)
return [...set]
}
-
0
const unique = (arr) => /TODO/{
return [...new Set(arr)] // set对象元素不可重复的特性哎去重复,再结构转为数组返回出来
}
-
0
const unique = (arr) => { return arr.filter(function (element, index) { return arr.indexOf(element) === index; }); };
-
0
const unique = (arr) => { let result = []; arr.forEach((e, idx, arr) => { if(idx === arr.indexOf(e)) { result.push(e) } }) return result; }
利用indexOf方法,如果元素的序号跟它在数组内第一次出现的序号相等,则把它push进result数组.
-
0
const unique = (arr) => [...new Set(arr)];
利用扩展运算符,这道题很简单
-
0
const unique = (...res) => {
// Array.from(new Set())
let arr=[];
res.forEach((ite)=>{
arr=[].concat(ite);
})
return Array.from(new Set(arr))
}
//还有正则去,但是想不到
-
0
const unique = (arr) => { let a = [] let s = new Set(arr) for (let item of s) { a.push(item) } return a }
-
0
就这么简单
const unique = (arr) => Array.from(new Set(arr))
-
0
@湛瞳 转换为数组
-
0
ES5写法
const unique = (arr) => { let obj = {},ret = []; for(let i = 0 ;i<arr.length;i++){ let key = arr[i] + (typeof arr[i]); if(!obj[key]){ obj[key] = true; ret.push(arr[i]) } } return ret; }