当前位置: 首页 > news >正文

splice()、slice()、split()三种方法的区别

slice

slice() 方法返回一个新的数组对象,这一对象是一个由 startend 决定的原数组的浅拷贝(包括 start,不包括 end),其中 startend 代表了数组元素的索引。原始数组不会被改变。

 const animals = ['ant', 'bison', 'camel', 'duck', 'elephant', 'dog'];// console.log(animals.slice(2));  // // ["camel", "duck", "elephant"]  从下标2开始截取
​//console.log(animals.slice(2, 4));//  ["camel", "duck"]            从下标2开始截取,到下标4结束,不包含4 
​//console.log(animals.slice(1, 5));   // ["bison", "camel", "duck", "elephant"]  从下标1开始截取,到下标5结束,不包含5 
​// console.log(animals.slice(-2));//  ["elephant", "dog"]        从后往前截取, 数字是几就截取几位
​//console.log(animals.slice(2, -1)); //  ['camel', 'duck', 'elephant']   从下标2开始截取,结束位置是从后面开始的负一
​//console.log(animals.slice());// ["ant", "bison", "camel", "duck", "elephant","dog"]   如果不传截取的数目,就是对原数组的拷贝
​const res1 = animals.slice()console.log(res1)//['ant', 'bison', 'camel', 'duck', 'elephant', 'dog'] const res2 = animals.slice(0)  console.log(res2)// ['ant', 'bison', 'camel', 'duck', 'elephant', 'dog']   // 传入一个数字0 ,从效果上来看像是拷贝,但实际上它还是截取,此时的它可以说是新的数组对象console.log(res1===res2)  //falseconsole.log(res1==res2)  //false

splice()

splice() 方法就地移除或者替换已存在的元素和/或添加新的元素。

​const months = ['Jan', 'March', 'April', 'June'];months.splice(1, 0, 'Feb');console.log(months);//  ["Jan", "Feb", "March", "April", "June"]
​months.splice(4, 1, 'May');console.log(months);//  Array ["Jan", "Feb", "March", "April", "May"]months.splice();console.log(months)//['Jan', 'Feb', 'March', 'April', 'May']
​months.splice(0);console.log(months)//[]

语法

splice(start)
splice(start, deleteCount)
splice(start, deleteCount, item1)
splice(start, deleteCount, item1, item2)
splice(start, deleteCount, item1, item2, /* …, */ itemN)

start 从 0 开始计算的索引,表示要开始改变数组的位置,它会被转换成整数。 负索引从数组末尾开始计算——如果 -buffer.length <= start < 0,使用 start + array.length。 如果 start < -array.length,使用 0。 如果 start >= array.length,则不会删除任何元素,但是该方法会表现为添加元素的函数,添加所提供的那些元素。 如果 start 被省略了(即调用 splice() 时不传递参数),则不会删除任何元素。这与传递 undefined 不同,后者会被转换为 0。 deleteCount 可选 一个整数,表示数组中要从 start 开始删除的元素数量。 如果省略了 deleteCount,或者其值大于或等于由 start 指定的位置到数组末尾的元素数量,那么从 start 到数组末尾的所有元素将被删除。但是,如果你想要传递任何 itemN 参数,则应向 deleteCount 传递 Infinity 值,以删除 start 之后的所有元素,因为显式的 undefined 会转换为 0。 如果 deleteCount 是 0 或者负数,则不会移除任何元素。在这种情况下,你应该至少指定一个新元素(请参见下文)。

item1、…、itemN 可选
从 start 开始要加入到数组中的元素。
​
如果不指定任何元素,splice() 将只从数组中删除元素。
​返回值
一个包含了删除的元素的数组。
如果只移除一个元素,则返回一个元素的数组。
如果没有删除任何元素,则返回一个空数组。
​
描述
splice() 方法是一个修改方法。它可能会更改 this 的内容。如果指定的要插入的元素数量与要删除的元素数量不同,数组的 length 也将会更改。同时,它会使用 @@species 来创建一个新数组实例并返回。
​
如果删除的部分是稀疏的,则 splice() 返回的数组也是稀疏的,对应的索引为空槽。
​
splice() 方法是通用的。它只期望 this 值具有 length 属性和整数键属性。尽管字符串也类似于数组,但这种方法不适用于它,因为字符串是不可变的。
  
​
在索引 2 处移除 0 个元素,并插入“drum”
const myFish = ["angel", "clown", "mandarin", "sturgeon"];
const removed = myFish.splice(2, 0, "drum");["angel", "clown", "drum", "mandarin", "sturgeon"]
​
​
​
在索引 2 处移除 0 个元素,并插入“drum”和“guitar”
const myFish = ["angel", "clown", "mandarin", "sturgeon"];
const removed = myFish.splice(2, 0, "drum", "guitar");["angel", "clown", "drum", "guitar", "mandarin", "sturgeon"]
​
​
在索引 0 处移除 0 个元素,并插入“angel”
splice(0, 0, ...elements) 像 unshift() 一样在数组的开头插入元素。
const myFish = ["clown", "mandarin", "sturgeon"];
const removed = myFish.splice(0, 0, "angel");
// myFish 是 ["angel", "clown", "mandarin", "sturgeon"]
​
​
在最后一个索引处移除 0 个元素,并插入“sturgeon”
splice(array.length, 0, ...elements) 像 push() 一样在数组的末尾插入元素。
const myFish = ["angel", "clown", "mandarin"];
const removed = myFish.splice(myFish.length, 0, "sturgeon");
// myFish 是 ["angel", "clown", "mandarin", "sturgeon"]
​
​
在索引 3 处移除 1 个元素
const myFish = ["angel", "clown", "drum", "mandarin", "sturgeon"];
const removed = myFish.splice(3, 1);
// myFish 是 ["angel", "clown", "drum", "sturgeon"]
​
​
在索引 2 处移除 1 个元素,并插入“trumpet”
const myFish = ["angel", "clown", "drum", "sturgeon"];
const removed = myFish.splice(2, 1, "trumpet");
// myFish 是 ["angel", "clown", "trumpet", "sturgeon"]
​
​
从索引 0 处移除 2 个元素,并插入“parrot”、“anemone”和“blue”
const myFish = ["angel", "clown", "trumpet", "sturgeon"];
const removed = myFish.splice(0, 2, "parrot", "anemone", "blue");
// myFish 是 ["parrot", "anemone", "blue", "trumpet", "sturgeon"]
// removed 是 ["angel", "clown"]
​
​
从索引 2 处开始移除 2 个元素
const myFish = ["parrot", "anemone", "blue", "trumpet", "sturgeon"];
const removed = myFish.splice(2, 2);
// myFish 是 ["parrot", "anemone", "sturgeon"]
// removed 是 ["blue", "trumpet"]
​
​
在索引 -2 处移除 1 个元素
const myFish = ["angel", "clown", "mandarin", "sturgeon"];
const removed = myFish.splice(-2, 1);
// myFish 是 ["angel", "clown", "sturgeon"]
// removed 是 ["mandarin"]
​
​
删除从索引 2 开始的所有元素
const myFish = ["angel", "clown", "mandarin", "sturgeon"];
const removed = myFish.splice(2);
// myFish 是 ["angel", "clown"]
// removed 是 ["mandarin", "sturgeon"]
​
​
在稀疏数组中使用 splice()
splice() 方法保留了数组的稀疏性。
const arr = [1, , 3, 4, , 6];
console.log(arr.splice(1, 2)); // [empty, 3]
console.log(arr); // [1, 4, empty, 6]
​
​
​
在非数组对象中使用 splice()
splice() 方法读取 this 的 length 属性。然后,它根据需要更新整数键属性和 length 属性。
const arrayLike = {length: 3,unrelated: "foo",0: 5,2: 4,
};
console.log(Array.prototype.splice.call(arrayLike, 0, 1, 2, 3));
// [ 5 ]
console.log(arrayLike);
// { '0': 2, '1': 3, '3': 4, length: 4, unrelated: 'foo' }

split

split() 方法接受一个模式,通过搜索模式将字符串分割成一个有序的子串列表,将这些子串放入一个数组,并返回该数组。

 const str = 'The quick brown fox jumps over the lazy dog.';
​const words = str.split(' ');console.log(words[3]);//  "fox"
​const chars = str.split('');console.log(chars[8]);//  "k"
​const strCopy = str.split();console.log(strCopy);// ["The quick brown fox jumps over the lazy dog."]
​语法sring.split(separator)string.split(separator, limit)
​其中,separator表示用来分割字符串的字符或字符串,limit表示返回的数组的最大长度。var str = "How are you doing today?";var words = str.split(" "); //从空格部分开始分割
​console.log(words);// ["How", "are", "you", "doing", "today?"]

相关文章:

splice()、slice()、split()三种方法的区别

slice slice() 方法返回一个新的数组对象&#xff0c;这一对象是一个由 start 和 end 决定的原数组的浅拷贝&#xff08;包括 start&#xff0c;不包括 end&#xff09;&#xff0c;其中 start 和 end 代表了数组元素的索引。原始数组不会被改变。 const animals [ant, bison…...

iOS 之homebrew ruby cocoapods 安装

cocoapods安装需要ruby&#xff0c;更新ruby需要rvm&#xff0c;下载rvm需要gpg&#xff0c;下载gpg需要homebrew&#xff0c;所以安装顺序是homebrew->gpg->rvm->ruby-cocoapods Rvm 官网&#xff1a; RVM: Ruby Version Manager - RVM Ruby Version Manager - Docum…...

【栈】2751. 机器人碰撞

本文涉及知识点 栈 LeetCode2751. 机器人碰撞 现有 n 个机器人&#xff0c;编号从 1 开始&#xff0c;每个机器人包含在路线上的位置、健康度和移动方向。 给你下标从 0 开始的两个整数数组 positions、healths 和一个字符串 directions&#xff08;directions[i] 为 ‘L’ …...

贪心算法06(leetcode738,968)

参考资料&#xff1a; https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9A%84%E6%95%B0%E5%AD%97.html 738. 单调递增的数字 题目描述&#xff1a; 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。…...

cve_2022_0543-redis沙盒漏洞复现 vulfocus

1. 原理 该漏洞的存在是因为Debian/Ubuntu中的Lua库是作为动态库提供的。自动填充了一个package变量&#xff0c;该变量又允许访问任意 Lua 功能。 2.复现 我们可以尝试payload&#xff1a; eval local io_l package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so…...

浅解Reids持久化

Reids持久化 RDB redis的存储方式&#xff1a; rdb文件都是二进制&#xff0c;很小&#xff0c;里面存的是数据 实现方式 redis-cli链接到redis服务端 使用save命令 注&#xff1a;不推荐 因为save命令是直接写到磁盘里面&#xff0c;速度特别慢&#xff0c;一般都是redis…...

Java24:会话管理 过滤器 监听器

一 会话管理 1.cookie 是一种客户端会话技术&#xff0c;cookie由服务端产生&#xff0c;它是服务器存放在浏览器的一小份数据&#xff0c;浏览器 以后每次访问服务器的时候都会将这小份的数据带到服务器去。 //创建cookie对象 Cookie cookie1new Cookie("…...

web前端电影简介标签:深度解析与创意应用

web前端电影简介标签&#xff1a;深度解析与创意应用 在web前端开发中&#xff0c;电影简介标签的设计与实现是一项既具挑战性又充满创意的任务。这些标签不仅需要准确传达电影的核心信息&#xff0c;还要通过精美的设计和交互效果吸引用户的眼球。本文将从四个方面、五个方面…...

Java面向对象-方法的重写、super

Java面向对象-方法的重写、super 一、方法的重写二、super关键字1、super可以省略2、super不可以省略3、super修饰构造器4、继承条件下构造方法的执行过程 一、方法的重写 1、发生在子类和父类中&#xff0c;当子类对父类提供的方法不满意的时候&#xff0c;要对父类的方法进行…...

解锁ChatGPT:从GPT-2实践入手解密ChatGPT

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三连支…...

20240605解决飞凌的OK3588-C的核心板刷机原厂buildroot不能连接ADB的问题

20240605解决飞凌的OK3588-C的核心板刷机原厂buildroot不能连接ADB的问题 2024/6/5 13:53 rootrootrootroot-ThinkBook-16-G5-IRH:~/repo_RK3588_Buildroot20240508$ ./build.sh --help rootrootrootroot-ThinkBook-16-G5-IRH:~/repo_RK3588_Buildroot20240508$ ./build.sh lun…...

c++手写的bitset

支持stl bitset 类似的api #include <iostream> #include <vector> #include <climits> #include <utility> #include <stdexcept> #include <iterator>using namespace std;const int W 64;class Bitset { private:vector<unsigned …...

【机器学习系列】深入理解集成学习:从Bagging到Boosting

目录 一、集成方法的一般思想 二、集成方法的基本原理 三、构建集成分类器的方法 常见的有装袋&#xff08;Bagging&#xff09;和提升&#xff08;Boosting&#xff09;两种方法 方法1 &#xff1a;装袋&#xff08;Bagging&#xff09; Bagging原理如下图&#xff1a; …...

用FFMPEG对YUV序列进行编辑的笔记

还是单独开一个吧 每次找挺烦的 播放YUV序列 ffmpeg -f rawvideo -pix_fmt yuv420p -s 3840x2160 -i "Wood.yuv" -vf "scale1280x720" -c:v rawvideo -pix_fmt yuv420p -f sdl "Wood"4K序列转720P ffmpeg -f rawvideo -pix_fmt yuv420p -s 38…...

智能投顾:重塑金融理财市场,引领行业新潮流

一、引言 在数字化浪潮的推动下,金融行业正经历着前所未有的变革。其中,智能投顾作为金融科技的重要分支,以其高效、便捷和个性化的服务,逐渐成为金融理财市场的新宠。本文旨在探讨智能投顾如何引领金融理财新潮流,通过丰富的案例及解决方案,展示其独特的魅力和价值。 二…...

iOS18 新变化提前了解,除了AI还有这些变化

iOS 18即将在不久的将来与广大iPhone用户见面&#xff0c;这次更新被普遍认为是苹果历史上最重要的软件更新之一。据多方报道和泄露的消息&#xff0c;iOS 18将带来一系列全新的功能和改进&#xff0c;包括在人工智能领域的重大突破、全新的设计元素以及增强的性能和安全性。现…...

力扣算法题:多数元素 --多语言实现

无意间看到&#xff0c;力扣存算法代码居然还得升级vip。。。好吧&#xff0c;我自己存吧 golang&#xff1a; func majorityElement(nums []int) int {count : 0condidate : 0for _,val : range nums {if count 0 {condidate valcount 1} else if val condidate {count} …...

[Kubernetes] 容器运行时 Container Runtime

文章目录 1.容器运行时(Container Runtime)2.容器运行时接口3.容器运行时层级4.容器运行时比较5.强隔离容器6.K8S为何难以实现真正的多租户 1.容器运行时(Container Runtime) Container Runtime 是运行于 k8s 集群每个节点中&#xff0c;负责容器的整个生命周期。Docker 就目前…...

10进制与二、八、十六进制的转换

x进制转10进制 1、如八进制数123&#xff0c;通过把每一位数字和8的指数级进行相乘 1 * 8^2 2 * 8^1 3 * 8^01 * 64 2 * 8 3 * 164 16 383 2、十六进制1A3 1 * 16^2 A(即10) * 16^1 3 * 16^01 * 256 10 * 16 3 * 1256 160 3419 3、二进制1010 1 * 2^3 0 * 2…...

日常实习-小米计算机视觉算法岗面经

文章目录 流程问题请你写出项目中用到的模型代码&#xff0c;Resnet50&#xff08;1&#xff09;网络退化现象&#xff1a;把网络加深之后&#xff0c;效果反而变差了&#xff08;2&#xff09;过拟合现象&#xff1a;训练集表现很棒&#xff0c;测试集很差 把你做的工作里面的…...

大语言模型安全防线:揭秘提示词注入攻击的防御实战

1. 从“魔法咒语”到“安全漏洞”&#xff1a;重新认识提示词注入 大家好&#xff0c;我是老张&#xff0c;在AI和智能硬件这行摸爬滚打了十几年。记得最早接触大语言模型时&#xff0c;我们这些开发者最兴奋的就是“提示词工程”——通过精心设计的“咒语”&#xff0c;让模型…...

圣女司幼幽-造相Z-Turbo开源镜像深度解析:版权合规下的个人学习与研究实践

圣女司幼幽-造相Z-Turbo开源镜像深度解析&#xff1a;版权合规下的个人学习与研究实践 1. 镜像概述与核心价值 圣女司幼幽-造相Z-Turbo是一个基于Z-Image-Turbo LoRA版本的专业文生图模型&#xff0c;专门用于生成《牧神记》中圣女司幼幽角色的高质量图像。这个开源镜像为AI艺…...

从零构建51单片机电子秤:10kg量程HX711传感器与Proteus仿真全解析

1. 项目开篇&#xff1a;为什么选择51单片机做电子秤&#xff1f; 很多刚接触单片机的小伙伴&#xff0c;可能都听说过STM32、ESP32这些更“时髦”的芯片&#xff0c;心里可能会犯嘀咕&#xff1a;现在还用老掉牙的51单片机做项目&#xff0c;是不是有点过时了&#xff1f;作为…...

Audio Pixel Studio实战教程:用logs缓存机制实现音频处理历史追溯与批量导出

Audio Pixel Studio实战教程&#xff1a;用logs缓存机制实现音频处理历史追溯与批量导出 1. 引言&#xff1a;从一次处理到高效管理 想象一下这个场景&#xff1a;你正在为一个视频项目准备旁白&#xff0c;用Audio Pixel Studio生成了十几段不同语气、不同语速的语音。过了一…...

腾讯云“当前登录IP”与个人实际IP不符

2026/3/13日购买了腾讯云服务器&#xff0c;准备用Navicat连接腾讯云上部署的mysql时连接失败。正常排查问题&#xff0c;开启防火墙当前登录ip允许访问3306端口开发&#xff08;相当于阿里云的安全组&#xff09;&#xff0c;关闭镜像实例的防火墙&#xff08;已关闭&#xff…...

Python itertools模块详细教程

Python itertools模块详细教程 1. 模块简介 itertools模块是Python标准库中的一个重要模块&#xff0c;提供了一系列快速、节省内存的迭代器函数。这些函数受到APL、Haskell和SML等函数式编程语言的启发&#xff0c;用于创建各种类型的迭代器&#xff0c;帮助开发者更高效地处…...

3步解决Navicat密码遗忘难题:开源解密工具全流程使用指南

3步解决Navicat密码遗忘难题&#xff1a;开源解密工具全流程使用指南 【免费下载链接】navicat_password_decrypt 忘记navicat密码时,此工具可以帮您查看密码 项目地址: https://gitcode.com/gh_mirrors/na/navicat_password_decrypt 数据库管理工作中&#xff0c;忘记N…...

华为机试Python实战:三道高频考题解析与避坑指南

1. 华为机试Python备考指南 华为机试作为技术岗位招聘的重要环节&#xff0c;对编程能力和问题解决能力有较高要求。我去年参加机试时发现&#xff0c;虽然整体难度适中&#xff0c;但很多考生容易在细节处理上翻车。这里分享一些实战经验&#xff0c;帮助大家避开常见陷阱。 考…...

通义千问1.5-1.8B-Chat-GPTQ-Int4 Anaconda安装与环境管理:为模型部署创建独立Python空间

通义千问1.5-1.8B-Chat-GPTQ-Int4 Anaconda安装与环境管理&#xff1a;为模型部署创建独立Python空间 你是不是刚拿到通义千问这类大模型的代码&#xff0c;准备跑起来试试&#xff0c;结果第一步就被各种Python包冲突、版本不兼容搞得头大&#xff1f;我刚开始接触模型部署的…...

小白友好:CYBER-VISION零号协议智能助盲眼镜系统一键部署教程

小白友好&#xff1a;CYBER-VISION零号协议智能助盲眼镜系统一键部署教程 想体验一下未来科技吗&#xff1f;想象一下&#xff0c;一副眼镜能像科幻电影里那样&#xff0c;实时“看懂”周围环境&#xff0c;把障碍物、人行道、车辆都用酷炫的线条勾勒出来&#xff0c;还能用语…...