- 数组去重还可以这样做,跟一个面试官聊天,给我提供的思路,原理是indexOf返回从左到右的第一个元素的下标,那么和它的index如果一样,证明就对了,其他不对的过滤掉就可以,一次循环结束战斗
let a = [1,2,2,5,5,3,23,1,5]
let b = a.filter((item,index)=>a.indexOf(item)===index)
- 也是和面试官聊的,说给我一个播放器,里面15首歌,每次切换歌的顺序都不一样,每个位置都不在原来的位置上,问我如何实现(我个人对这些题感兴趣,但当时环境有些紧张没说上来,回来后想了想写了出来,还是值得纪念的)
function getRandomList(arr) {
let res = [];
let exists = [];
while (res.length !== arr.length) {
let narr = JSON.parse(JSON.stringify(arr));
let flag = exists.indexOf(res.length) === -1
if (flag)
exists.push(res.length);
narr = narr.filter((_, i) => exists.indexOf(i) === -1)
if (flag)
exists.pop()
let index = Math.floor(narr.length * Math.random());
exists.push(arr.indexOf(narr[index]));
res.push(narr[index]);
}
let val = res[res.length-1]
if (!val) {
res.pop()
let tmp = res.pop()
res.push(arr.pop())
res.push(tmp)
}
return res;
}
let r = getRandomList([
"七里香",
"new boy",
"稻香",
"说好不哭",
"你是我的眼",
"星爵",
]);
console.log(r);