• JavaScript 数组/字符串 排序、查找、去重


     对数组和字符串排序、查找、去重是常见的操作,这里权做学习记录。

    数组和字符串在空间上都可以看作连续的变量,所以两者的排序应该是一致的吧。就像可以将字符串视为包含字符的数组集合,可以使用数组的一些方法和索引操作来处理字符串。例如:使用循环遍历字符串中的字符,或者使用字符串的length属性获取字符串的长度。

    数组的类型:

    1. const numbers = [10, 5, 8, 2, 7];
    2. const strings = ['banana', 'cherry', 'apple', 'date'];
    3. const objects= [
    4. {id:1,content:'a'},
    5. {id:5,content:'c'},
    6. {id:4,content:'b'},
    7. {id:2,content:'f'},
    8. {id:3,content:'d'},
    9. ];

    一、排序

    1.sort

    这是按照元素的值进行排序,而不是按照元素的类型进行排序。

    如果是数字,则是按照值的大小,如果是字符串,则基于元素的 Unicode 编码值(字符编码)。

    1. const numbers = [10, 5, 8, 2, 7];
    2. numbers.sort((a, b) => a - b);
    3. console.log(numbers); // 输出:[2, 5, 7, 8, 10]
    4. const strings = ['banana', 'cherry', 'apple', 'date'];
    5. strings.sort(); // 默认按照 Unicode 编码值排序
    6. console.log(strings); // 输出:['apple', 'banana', 'cherry', 'date']

    注意:sort 可以接受一个可选的比较函数,以定义自定义的排序规则 

    上面那种,a-b 代表的是升序,反之是降序。(记忆技巧,ABCD的值是依次增大,个人用)

    2.sort自定义

     自定义的如下面这种:(返回字符串的长度大小)

    1. const strings = ['banana', 'cherry', 'apple', 'date'];
    2. strings.sort((a, b) => a.length - b.length);
    3. console.log(strings); // 输出:['date', 'apple', 'cherry', 'banana']

    当然针对数组里的某个对象的属性也可以通过以下方式进行排序 

    1. const people = [
    2. { name: "Alice", age: 25 },
    3. { name: "Bob", age: 30 },
    4. { name: "Charlie", age: 22 }
    5. ];
    6. people.sort((a, b) => a.age - b.age); // 按年龄升序排序
    7. console.log(people);

    二、查找

    对于数组,常常可以用这几个方法来实现查找功能:indexOf()方法来在数据库中的索引位置查找某个特定的值,也可以使用find()方法来查找满足特定条件的元素。当然还是要根据查找的复杂性和需求来确认是使用那种

    1.indexOf()

    查找到符合条件的元素的索引

    1. const fruits = ["apple", "banana", "cherry", "date", "berry"];
    2. const index = fruits.indexOf("cherry");
    3. if (index !== -1) {
    4. console.log(`"cherry" 的索引是 ${index}`);
    5. } else {
    6. console.log("未找到");
    7. }

    2.filter()

    过滤出符合条件的元素。

    1. const numbers = [3, 1, 5, 2, 4];
    2. const evenNumbers = numbers.filter((number) => number % 2 === 0);
    3. console.log("偶数数组:", evenNumbers);

     3.find()

    对象数组,找到符合条件的。

    1. const people = [
    2. { name: "Alice", age: 25 },
    3. { name: "Bob", age: 30 },
    4. { name: "Charlie", age: 22 }
    5. ];
    6. const person = people.find((person) => person.name === "Bob");
    7. if (person) {
    8. console.log(`找到了 ${person.name},年龄是 ${person.age} 岁`);
    9. } else {
    10. console.log("未找到");
    11. }

    三、去重

    1.new Set()

    改变数据结构,ES6以上支持:

    1. const array = [1, 2, 2, 3, 4, 4, 5];
    2. const uniqueArray = [...new Set(array)];
    3. console.log(uniqueArray); // [1, 2, 3, 4, 5]

    这种可以支持查找, uniqueArray.has(某个值)

    2.filter()

    很常用

    1. const array = [1, 2, 2, 3, 4, 4, 5];
    2. const uniqueArray = array.filter((value, index, self) => self.indexOf(value) === index);
    3. console.log(uniqueArray); // [1, 2, 3, 4, 5]

     3.reduce() 

    没怎么用过

    1. const array = [1, 2, 2, 3, 4, 4, 5];
    2. const uniqueArray = array.reduce((accumulator, currentValue) => {
    3. if (!accumulator.includes(currentValue)) {
    4. accumulator.push(currentValue);
    5. }
    6. return accumulator;
    7. }, []);
    8. console.log(uniqueArray); // [1, 2, 3, 4, 5]

    4.for循环

    最基础的,时间和空间复杂度都是0

    1. const array = [1, 2, 2, 3, 4, 4, 5];
    2. const uniqueArray = [];
    3. for (const item of array) {
    4. if (!uniqueArray.includes(item)) {
    5. uniqueArray.push(item);
    6. }
    7. }
    8. console.log(uniqueArray); // [1, 2, 3, 4, 5]

     5.map()

    1. const array = [1, 2, 2, 3, 4, 4, 5];
    2. const map = new Map();
    3. const uniqueArray = [];
    4. for (const item of array) {
    5. if (!map.has(item)) {
    6. map.set(item, true);
    7. uniqueArray.push(item);
    8. }
    9. }
    10. console.log(uniqueArray); // [1, 2, 3, 4, 5]

    11月7号,暂时先记这些。 

    , 2, 3, 4, 5]

    总结

    这里记录一些开发中常用到的一些数据排序、查找、去重的方法,之后有时间遇到再更新补充。

  • 相关阅读:
    spark调优
    华为 连接OSPF和RIP网络---OSPF和RIP网络相互引入
    如何在 Spartacus 使用 UserAccountFacade 在语言设置更改后重新读取用户数据
    qt+opengl 着色器VAO、VBO、EBO(四)
    分享15个我总结的思维模型,程序员必读,受用终身
    【Xml Tool】 裁剪某个区域重新生成xml
    C#面:解释什么是闭包
    新版Android Studio中设置gradle的JDK版本
    C++学习:类的使用--运算符重载
    Util工具类(JwtUtil、MD5Util、ThreadLocalUtil、拦截器配置)
  • 原文地址:https://blog.csdn.net/ParkChanyelo/article/details/134168096