js精彩代码集锦

收集一些基础的、精彩的JavaScript代码片段。

查找算法

二分查找(适用于有序数据)O(logn)

// 从中间开始,查找元素x,比x小,从右侧元素找
const find = function (arr, findEl) {let min = 0let count = 0let max = arr.length - 1while (min < max) {count++let middle = Math.floor((min + max) / 2)let middleEl = arr[middle]if (middleEl === findEl) {console.log('循环了多少次:', count)return middle}if (middleEl < findEl) {min = middle + 1} else {max = middle - 1}}
}
console.log('find', find([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 9))

选择排序(每次都找到当前数组中最小的插入到新数组,然后再次找剩下元素中的最小元素)

// 找到最小的
const findSmallest = function (arr) {let smallest = arr[0]let smallest_index = 0for (let i = 0; i < arr.length; i++) {if (arr[i] < smallest) {smallest = arr[i]smallest_index = i}}return smallest_index
}
const selectionSort = function (arr) {let newArr = []let idx = arr.length - 1while (idx >= 0) {if (idx < 0) returnconst smallest_index = findSmallest(arr)const el = arr.splice(smallest_index, 1)newArr.push(el[0])idx--}return newArr
}
console.log('selectionSort([5, 3, 6, 2, 10])', selectionSort([5, 3, 6, 2, 10]))

快速排序 O(n*logn)

// 找一个基准数,比它小的放左边子数组,比它大的放右边子数组,重复步骤,知道只剩下一个元素
const quicksort = function (arr) {if (arr.length < 2) return arrconst middle = arr.splice(Math.floor(arr.length / 2), 1)[0]const less = arr.filter(v => v < middle)const greater = arr.filter(v => v > middle)return quicksort(less).concat([middle]).concat(quicksort(greater))
}
console.log('quicksort([10, 5, 2, 3])', quicksort([10, 5, 2, 3]))

散列函数

// 对于输入点一个固定的数,得到的总会是一个固定的值
const sanlieFun = function (el) {let obj = {a: 1,b: 2}return obj[el]
}

图-广度优先搜索(非加权图 寻找从a到b的最‘短’路径)

// 有序的图 为 拓扑排序
// 从上往下 不能从下往上的 为 树
// 图-狄克斯特拉算法(加权图 只适用于有向无环图 寻找从a到b的最‘快’路径)
//  不能将狄克斯特拉算法用于包含负权边的图 。在包 含负权边的图中,要找出最短路径,可使用另一种算法——贝尔曼-福 德算法
let processed = {}
const findLowestCostNode = function (costs) {let lowest_cost = Infinitylowest_cost_node = nullfor (const node in costs) {if (Object.hasOwnProperty.call(costs, node)) {const cost = costs[node]if (cost < lowest_cost && !processed.node) {lowest_cost = costlowest_cost_node = node}}}return lowest_cost_node
}
const dkstlsfFun = function () {let graph = {start: {a: 6,b: 2},a: {fin: 1},b: {a: 3,fin: 5},fin: {}}let costs = {a: 6,b: 2,fin: Infinity}let parents = {a: 'start',b: 'start',fin: null}let node = findLowestCostNode(costs)while (!processed.node) {const cost = costs[node]let neighbors = graph[node]for (let i = 0; i < Object.keys(neighbors).length; i++) {const v = Object.keys(neighbors)[i]const new_cost = cost + neighbors[v]if (costs[v] > new_cost) {costs[v] = new_costparents[v] = node}}processed.node = truenode = findLowestCostNode(costs)}console.log('graph', graph, costs, parents)
}
dkstlsfFun()

工具类

根据秒值转时分秒展示

利用momentjs库快捷获取时分秒值,判断拼接文本,return出拼接文本和原始值

import moment from 'moment'
const GetDateTextBySeconds = function (val) {const duration = moment.duration(val, 'seconds')const hours = Math.floor(duration.asHours())const minutes = Math.floor(duration.minutes())const seconds = Math.floor(duration.seconds())let res = ''if (hours > 0) {res += hours + '时 '}if (minutes > 0 || hours > 0) {res += minutes + '分 '}res += seconds + '秒'return {text: res,seconds: val}
}

检查和展示有效的经纬度坐标

经度范围-180~180,0表示本初子午线,值为正数则表示东经E,负数表示西经W。
维度范围-90~90,0表示赤道,值为正数则表示北纬N,值为负数表示南纬S。

按照这条规则,可以封装判断是否为有效的经纬度值,并且组合展示经纬度文本。这儿展示时经纬度展示了小数点后6位。

const ValidLatitude = function (lat) {return isFinite(lat) && Math.abs(lat) <= 90
}
const ValidLongitude = function (lon) {return isFinite(lon) && Math.abs(lon) <= 180
}
const ValidCoordinates = function (lon, lat) {return ValidLongitude(lon) && ValidLatitude(lat)
}// 显示有效的经纬度
const ShowLatitude = function (lat) {if (!ValidLatitude(lat)) returnconst res = parseFloat(lat).toFixed(6)if (res >= 0) {return 'N' + res} else {return 'S' + res}
}
const ShowLongitude = function (lon) {if (!ValidLongitude(lon)) returnconst res = parseFloat(lon).toFixed(6)if (res >= 0) {return 'E' + res} else {return 'W' + res}
}
const FormatCoordinates = function (lng, lat) {return ShowLongitude(lng) + ', ' + ShowLatitude(lat)
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/69339.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode力扣】1.(简单)两数之和(JavaScript)

两数之和&#xff1a; 题目描述: 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重…

安卓7以上抓包证书安装

安卓7以上抓包证书安装 fiddler 用户可以直接试试这个文件 前提是要root过了&#xff0c;如果是模拟器就很容易开启 前提&#xff1a;要有openssl工具&#xff0c;在linux一个指令就可以下载了&#xff1a;sudo apt-get install openssl,windons则是在https://www.openssl.org/…

【GoLang】切片的面试知识点

nil切片 和 空切片 nil切片是只声明但未初始化&#xff0c;没有分配底层数组的内存空间&#xff0c; 空切片是初始化了的&#xff0c;有分配数组内存&#xff0c;只是数组内没有元素。 二者都可以正常扩容、遍历。不会报错。 append 如何添加切片 append 可以增加切片&…

利用 IMU 估计人体关节轴向和位置 —— 论文推导

Title: 利用 IMU 估计人体关节轴向和位置 —— “Joint axis and position estimation from inertial measurement data by exploiting kinematic constraints” —— 论文推导 文章目录 I. 论文回顾II. 铰接关节的约束1. 铰接关节约束的原理2. 铰接关节约束的梯度3. 铰接关节约…

JVM图文入门

往期推荐 【已解决】redisCache注解失效&#xff0c;没写cacheConfig_com.howbuy.cachemanagement.client.redisclient#incr-CSDN博客 【已解决】OSS配置问题_keyuewenhua.oss-cn-beijing.aliyuncs-CSDN博客 【排坑】云服务器docker部署前后端分离项目域名解析OSS-CSDN博客 微服…

利用ETL工具进行数据挖掘

ETL的基本概念 数据抽取&#xff08;Extraction&#xff09;&#xff1a;从不同源头系统中获取所需数据的步骤。比如从mysql中拿取数据就是一种简单的抽取动作&#xff0c;从API接口拿取数据也是。 数据转换&#xff08;Transformation&#xff09;&#xff1a;清洗、整合和转…

超详细UE4(虚幻4)第一人称射击(FPS)游戏制作教程

超详细UE4(虚幻4)第一人称射击(FPS)游戏制作教程 引言 在游戏开发领域,第一人称射击(FPS)游戏一直是最受欢迎的类型之一。从经典的《反恐精英》(CS)到现代的《使命召唤》(Call of Duty),FPS游戏凭借其紧张刺激的游戏体验和高度沉浸感,吸引了无数玩家。如果你是一…

MySQL数据库(五)索引

一 索引概述 1 介绍&#xff1a;MySQL索引是一种有序数据结构&#xff0c;它能够高效帮助数据库系统快速定位到表中的特定记录&#xff0c;从而显著提高查询效率。索引可以被看作是书的目录&#xff0c;通过它可以迅速找到所需的信息而不需要逐页翻阅整本书。 2 优缺点 二 索…

LeetCode 5

最长回文子串 动态规划 d p [ i ] [ j ] d p [ i 1 ] [ j − 1 ] a n d s [ i ] s [ j ] dp[i][j] dp[i1][j-1] \ \ and \ \ s[i]s[j] dp[i][j]dp[i1][j−1] and s[i]s[j] 长串依赖短串的状态。 所以枚举长度的时候从大到小。 const int N 1010; class Solu…

让文物“活”起来,以3D数字化技术传承文物历史文化!

文物&#xff0c;作为不可再生的宝贵资源&#xff0c;其任何毁损都是无法逆转的损失。然而&#xff0c;当前文物保护与修复领域仍大量依赖传统技术&#xff0c;同时&#xff0c;文物管理机构和专业团队的力量相对薄弱&#xff0c;亟需引入数字化管理手段以应对挑战。 积木易搭…

一文解释nn、nn.Module与nn.functional的用法与区别

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;零基础入门PyTorch框架_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 …

HAL库外设宝典:基于CubeMX的STM32开发手册(持续更新)

目录 前言 GPIO&#xff08;通用输入输出引脚&#xff09; 推挽输出模式 浮空输入和上拉输入模式 GPIO其他模式以及内部电路原理 输出驱动器 输入驱动器 中断 外部中断&#xff08;EXTI&#xff09; 深入中断&#xff08;内部机制及原理&#xff09; 外部中断/事件控…

mac 安装 dotnet 环境

目录 一、安装准备 二、安装方法&#xff08;两种任选&#xff09; 方法 1&#xff1a;使用官方安装包&#xff08;推荐新手&#xff09; 方法 2&#xff1a;使用 Homebrew&#xff08;适合开发者&#xff09; 1. 安装 Homebrew&#xff08;如未安装&#xff09; 2. 通过 …

ChatGPT怎么回事?

纯属发现&#xff0c;调侃一下~ 这段时间deepseek不是特别火吗&#xff0c;尤其是它的推理功能&#xff0c;突发奇想&#xff0c;想用deepseek回答一些问题&#xff0c;回答一个问题之后就回复服务器繁忙&#xff08;估计还在被攻击吧~_~&#xff09; 然后就转向了GPT&#xf…

结合深度学习、自然语言处理(NLP)与多准则决策的三阶段技术框架,旨在实现从消费者情感分析到个性化决策

针对电商个性化推荐场景的集成机器学习和稳健优化三阶段方案。 第一阶段:在线评论数据处理&#xff0c;利用深度学习和自然语言处理技术进行特征挖掘&#xff0c;进而进行消费者情感分析&#xff0c;得到消费者偏好 在第一阶段&#xff0c;我们主要关注如何通过深度学习和自然语…

GrassWebProxy

GrassWebProxy第一版&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Net.Sockets; using System.Net; using System.Text; using System.Threading; using System.Threading.Tasks; using System.IO; using Newtonsoft.Json;…

Websocket从原理到实战

引言 WebSocket 是一种在单个 TCP 连接上进行全双工通信的网络协议&#xff0c;它使得客户端和服务器之间能够进行实时、双向的通信&#xff0c;既然是通信协议一定要从发展历史到协议内容到应用场景最后到实战全方位了解 发展历史 WebSocket 最初是为了解决 HTTP 协议在实时…

[LeetCode]day16 242.有效的字母异位词

242. 有效的字母异位词 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的 字母异位词 示例 1: 输入: s "anagram", t "nagaram" 输出: true示例 2: 输入: s "rat"…

计算机考研复试上机02

目录 3、排序 1)排序(华中科技大学复试上机题) 2)成绩排序(清华大学复试上机题) 3)特殊排序(华中科技大学复试上机题) 4)整数奇偶排序(北京大学复试上机题) 5)小白鼠排队(北京大学复试上机题) 4、查找 1)找 x(哈尔滨工业大学复试上机题) 2)查找(北…

UnityShader学习笔记——动态效果

——内容源自唐老狮的shader课程 目录 1.原理 2.Shader中内置的时间变量 3.Shader中经常会改变的数据 4.纹理动画 4.1.背景滚动 4.1.1.补充知识 4.1.2.基本原理 4.2.帧动画 4.2.1.基本原理 5.流动的2D河流 5.1.基本原理 5.2.关键步骤 5.3.补充知识 6.广告牌效果 …