开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第19天,点击查看活动详情
10、数组去重
方法一、
改变原数组
在.splice()后,当arr[i] 和 arr[j]相同时,它会自动的删除j位置的元素,然后j+1位置的元素,会变成j位置的元素 而j位置已经比较过了,不会重复比较,所以会出现漏比较的情况 解决办法,当删除一个元素后,需要将该位置的元素在比较一遍,所以为 j--
<script>
const arr = [1,2,1,3,2,2,4,5,5,6,7]
//分别获取数组中的元素
for(let i = 0; i < arr.length ; i++){
//获取当前值后边的所有值
for(let j = i + 1; i < arr.length; j++){
//判断两个数是否相等
if(arr[i] === arr[j]){
//出现了重复元素,删除后边的元素即可
arr.splice(j,1)
j--
}
}
}
console.log(arr)
</script>
方法二、
新建一数组
<script>
const arr = [1, 2, 1, 3, 2, 2, 4, 5, 5, 6, 7]
const newArr = []
for(let ele of arr){
if(newArr.indexOf(ele) === -1){
newArr.push(ele)
}
}
console.log(newArr)
</script>
11、排序
思路一:
冒泡排序
9, 1, 3, 2, 8, 0, 5, 7, 6, 4
- 比较相邻的两个元素,然后根据大小来决定是否交换它们的位置
- 例子: 第一次排序:1, 3, 2, 8, 0, 5, 7, 6, 4, 9 第二次排序:1, 2, 3, 0, 5, 7, 6, 4, 8, 9 第三次排序:1, 2, 0, 3, 5, 6, 4, 7, 8, 9 ... 倒数第二次 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
- 这种排序方式,被称为冒泡排序,冒泡排序是最慢的排序方式, 数字少还可以凑合用,不适用于数据量较大的排序
<script>
const arr = [9, 1, 3, 2, 8, 0, 5, 7, 6, 4]
for (let j = 0; j < arr.length - 1; j++) {
for (let i = 0; i < arr.length - 1; i++) {
// arr[i] 前边的元素 arr[i+1] 后边元素
if (arr[i] < arr[i + 1]) {
// 大数在前,小数在后,需要交换两个元素的位置
let temp = arr[i] // 临时变量用来存储arr[i]的值
arr[i] = arr[i + 1] // 将arr[i+1]的值赋给arr[i]
arr[i + 1] = temp // 修改arr[i+1]的值
}
}
}
console.log(arr)
</script>
冒泡优化
<script>
const arr = [9,1,3,2,8,9,0,5,7,6,4]
//使用优化后的冒泡排序-----内层循环条件变为length-1-j;呈斜线减少查询次数
for(let j = 0; j < arr.length -1; j++){
for (let i = 0; i < arr.length - 1 - j; i++) {
if (arr[i] > arr[i + 1]) {
let temp = arr[i]
arr[i] = arr[i + 1]
arr[i + 1] = temp
}
}
console.log(arr)
}
</script>
思路2: 9, 1, 3, 2, 8, 0, 5, 7, 6, 4
- 取出一个元素,然后将其他元素和该元素进行比较,如果其他元素比该元素小则交换两个元素的位置
- 例子: 0, 9, 3, 2, 8, 1, 5, 7, 6, 4 0, 1, 9, 3, 8, 2, 5, 7, 6, 4 0, 1, 2, 9, 8, 3, 5, 7, 6, 4 ...
选择排序
<script>
for(let i=0; i<arr.length; i++){
for(let j=i+1; j<arr.length; j++){
if(arr[i] > arr[j]){
// 交换两个元素的位置
let temp = arr[i]
arr[i] = arr[j]
arr[j] = temp
}
}
}
console.log(arr)
</script>