热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaScript常用算法实现:排序、数组去重、随机化数组、统计数组与字符串元素出现次数及解析URL参数

本文将探讨并实现一系列常见的JavaScript算法,包括数组排序、数组去重、随机化数组、统计数组或字符串中元素的出现次数以及解析URL中的参数。这些算法对于日常编程任务非常实用。
Javascript 常用算法实现

本文将详细介绍几个常用的Javascript算法实现,旨在帮助开发者提高代码效率和质量。涵盖的内容包括数组排序、数组去重、随机化数组、统计数组或字符串中元素的出现次数以及解析URL中的参数。

数组排序

在众多排序算法中,快速排序因其高效性而被广泛采用。下面将展示冒泡排序和快速排序的实现方法。

1. 冒泡排序

let arr = [0, 4, 2, 1, 3];
for (let i = 0; i for (let j = 0; j if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
console.log(arr);

2. 快速排序

function quickSort(arr) {
if (arr.length <= 1) return arr;
let pivotIndex = Math.floor(arr.length / 2);
let pivot = arr.splice(pivotIndex, 1)[0];
let left = [], right = [];
for (let i = 0; i if (arr[i] <= pivot) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return [...quickSort(left), pivot, ...quickSort(right)];
}
console.log(quickSort([0, 4, 2, 1, 3]));

数组去重

数组去重是处理数据时常见的需求。以下是几种实现方式:

1. 遍历数组法

let arr = ['2', 1, 5, 4, 7, '9', 4, 1, '2', 6, 8, 2];
let newArr = [];
arr.forEach(item => {
if (!newArr.includes(item)) {
newArr.push(item);
}
});
console.log(newArr);

2. 利用Set去重

let arr = ['2', 1, 5, 4, 7, '9', 4, 1, '2', 6, 8, 2];
let uniqueArr = [...new Set(arr)];
console.log(uniqueArr);

随机化数组

随机化数组可以使用Fisher-Yates洗牌算法实现,确保每个元素都有相同的概率出现在任何位置。

let arr = [2, 5, '6', 3, 9, '2', 4, 7];
for (let i = arr.length - 1; i > 0; i--) {
let j = Math.floor(Math.random() * (i + 1));
[arr[i], arr[j]] = [arr[j], arr[i]];
}
console.log(arr);

统计数组或字符串中元素出现次数

统计数组或字符串中元素的出现次数可以通过创建一个对象来记录每个元素的出现频率。

1. 数组元素出现次数

let arr = ['2', 1, 5, 4, 7, '9', 4, 1, '2', 6, 8, 2];
let counts = {};
arr.forEach(item => {
counts[item] = (counts[item] || 0) + 1;
});
console.log(counts);

2. 字符串字符出现次数

let str = 'abdcsdwdaoprr';
let charCounts = {};
for (let char of str) {
charCounts[char] = (charCounts[char] || 0) + 1;
}
console.log(charCounts);

解析URL参数

解析URL中的查询参数可以帮助我们更好地处理网页请求中的数据。

let url = 'https://www.google.com.hk/search?safe=strict&ei=M_u5WvLZO4bzUrfpn_AJ&q=js%9F%&oq=js%E7%BB&gs_l=psy-ab';
let params = new URLSearchParams(new URL(url).search);
let urlParams = {};
params.forEach((value, key) => {
urlParams[key] = value;
});
console.log(urlParams);


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 在给定的数组中,除了一个数字外,其他所有数字都是相同的。任务是找到这个唯一的不同数字。例如,findUniq([1, 1, 1, 2, 1, 1]) 返回 2,findUniq([0, 0, 0.55, 0, 0]) 返回 0.55。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 深入理解 H5C3 和 JavaScript 核心问题
    本文详细探讨了 H5C3 和 JavaScript 中的一些核心编程问题,通过实例解析和代码示例,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 在使用 MUI 框架进行应用开发时,开发者常常会遇到 mui.init() 和 mui.plusReady() 这两个方法。本文将详细解释它们的区别及其在不同开发环境下的应用。 ... [详细]
author-avatar
liuliyu2000_867
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有