对数组和字符串排序、查找、去重是常见的操作,这里权做学习记录。
目录
前言
一、排序
1.sort
2.sort自定义
二、查找
1.indexOf()
2.filter()
3.find()
三、去重
1.new Set()
2.filter()
3.reduce()
4.for循环
5.map()
总结
数组和字符串在空间上都可以看作连续的变量,所以两者的排序应该是一致的吧。就像可以将字符串视为包含字符的数组集合,可以使用数组的一些方法和索引操作来处理字符串。例如:使用循环遍历字符串中的字符,或者使用字符串的length
属性获取字符串的长度。
数组的类型:
const numbers = [10, 5, 8, 2, 7];
const strings = ['banana', 'cherry', 'apple', 'date'];
const objects= [
{id:1,content:'a'},
{id:5,content:'c'},
{id:4,content:'b'},
{id:2,content:'f'},
{id:3,content:'d'},
];
这是按照元素的值进行排序,而不是按照元素的类型进行排序。
如果是数字,则是按照值的大小,如果是字符串,则基于元素的 Unicode 编码值(字符编码)。
const numbers = [10, 5, 8, 2, 7];
numbers.sort((a, b) => a - b);
console.log(numbers); // 输出:[2, 5, 7, 8, 10]
const strings = ['banana', 'cherry', 'apple', 'date'];
strings.sort(); // 默认按照 Unicode 编码值排序
console.log(strings); // 输出:['apple', 'banana', 'cherry', 'date']
注意:sort 可以接受一个可选的比较函数,以定义自定义的排序规则
上面那种,a-b 代表的是升序,反之是降序。(记忆技巧,ABCD的值是依次增大,个人用)
自定义的如下面这种:(返回字符串的长度大小)
const strings = ['banana', 'cherry', 'apple', 'date'];
strings.sort((a, b) => a.length - b.length);
console.log(strings); // 输出:['date', 'apple', 'cherry', 'banana']
当然针对数组里的某个对象的属性也可以通过以下方式进行排序
const people = [
{ name: "Alice", age: 25 },
{ name: "Bob", age: 30 },
{ name: "Charlie", age: 22 }
];
people.sort((a, b) => a.age - b.age); // 按年龄升序排序
console.log(people);
对于数组,常常可以用这几个方法来实现查找功能:indexOf()
方法来在数据库中的索引位置查找某个特定的值,也可以使用find()
方法来查找满足特定条件的元素。当然还是要根据查找的复杂性和需求来确认是使用那种
查找到符合条件的元素的索引。
const fruits = ["apple", "banana", "cherry", "date", "berry"];
const index = fruits.indexOf("cherry");
if (index !== -1) {
console.log(`"cherry" 的索引是 ${index}`);
} else {
console.log("未找到");
}
过滤出符合条件的元素。
const numbers = [3, 1, 5, 2, 4];
const evenNumbers = numbers.filter((number) => number % 2 === 0);
console.log("偶数数组:", evenNumbers);
对象数组,找到符合条件的。
const people = [
{ name: "Alice", age: 25 },
{ name: "Bob", age: 30 },
{ name: "Charlie", age: 22 }
];
const person = people.find((person) => person.name === "Bob");
if (person) {
console.log(`找到了 ${person.name},年龄是 ${person.age} 岁`);
} else {
console.log("未找到");
}
改变数据结构,ES6以上支持:
const array = [1, 2, 2, 3, 4, 4, 5];
const uniqueArray = [...new Set(array)];
console.log(uniqueArray); // [1, 2, 3, 4, 5]
这种可以支持查找, uniqueArray.has(某个值)
很常用
const array = [1, 2, 2, 3, 4, 4, 5];
const uniqueArray = array.filter((value, index, self) => self.indexOf(value) === index);
console.log(uniqueArray); // [1, 2, 3, 4, 5]
没怎么用过
const array = [1, 2, 2, 3, 4, 4, 5];
const uniqueArray = array.reduce((accumulator, currentValue) => {
if (!accumulator.includes(currentValue)) {
accumulator.push(currentValue);
}
return accumulator;
}, []);
console.log(uniqueArray); // [1, 2, 3, 4, 5]
最基础的,时间和空间复杂度都是0
const array = [1, 2, 2, 3, 4, 4, 5];
const uniqueArray = [];
for (const item of array) {
if (!uniqueArray.includes(item)) {
uniqueArray.push(item);
}
}
console.log(uniqueArray); // [1, 2, 3, 4, 5]
const array = [1, 2, 2, 3, 4, 4, 5];
const map = new Map();
const uniqueArray = [];
for (const item of array) {
if (!map.has(item)) {
map.set(item, true);
uniqueArray.push(item);
}
}
console.log(uniqueArray); // [1, 2, 3, 4, 5]
11月7号,暂时先记这些。
, 2, 3, 4, 5]
这里记录一些开发中常用到的一些数据排序、查找、去重的方法,之后有时间遇到再更新补充。