绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
5 个JavaScript 中 Slice()的用例
2021-11-24 14:55:08




英文 | https://betterprogramming.pub/5-use-cases-for-slice-in-javascript-13462f2e177f
翻译 | 杨小爱

slice() 方法将数组部分的副本返回到新的数组对象中。这个对象是从头到尾选择的。请注意,它不会修改原始数组。
此外,如果向其中一个数组添加新元素,则另一个数组不会受到影响。
参数是什么?
slice() 方法的参数是开始和结束索引。
开始
它是一个从零开始的索引,用于开始复制数组的一部分。如果未定义,则默认值为 0。如果 start 大于数组的索引范围, slice() 方法将返回一个空数组。
此外,首先,您还可以使用负索引。slice(-1) 提取数组的后一个元素。它类似于 Python。
结尾
该参数是可选的。如果你的 slice() 函数中只有一个参数,那就是 start。如果省略, slice() 方法从序列的末尾提取。
如果它大于序列的长度,slice 一直提取到序列的末尾,只是在它被省略的情况下。
它是结束提取之前的索引。它不包括在内。因此,索引的后一个元素不包含在数组的副本中。例如, slice(1,3) 提取第二个和第三个元素。
y = [1, 2, 3, 4, 5, 6]y.slice(2, -2) // will return [3, 4]
这意味着 y 会将数组从索引 2 切片到索引 -2 独占。
1、复制一个数组
个功能是 slice() 函数的基本功能。没有参数的数组复制原始数组。有时,您可能想要更新数组中的某些元素。
但是,您可能希望保护原始数组中的元素。因此,您可以创建原始数组的浅表副本。
const midtermGrades = updatedGrades.slice();
2、构造一个以n开头的子数组
slice() 方法的第二个用例是复制以 n 开头的子数组。例如,您正在分析从考试中获得 80 分或更高分的学生。您发现学生的索引从 10 开始。因此,您可以复制成功学生的索引。
const successfulStudents = allStudents.slice(10);
你也可以得到不满意的学生。
const unsatisfactoryStudents = allStudents.slice(-10);
3、将类数组对象转换为数组
您可以使用 slice() 方法将看起来像数组的对象转换为数组。例如,您可以按如下方式创建函数。
function TransformToArray(){ return Array.prototype.slice.call(arguments);}
var newArray = TransformToArray("1", "2", "3", "4");console.log(newArray); // ["1", "2", "3", "4"];
4、 将一个 NodeList 转换成一个数组
NodeList 对象是从文档中提取的节点集合。您可以使用 querySelectorAll() 方法返回一个 NodeList 对象。
例如,您可以选择 HTML 文档中的所有 <p> 节点。使用 slice(),您可以将您选择的 NodeList 转换为数组。
var p = document.querySelectorAll(‘p’);var pNodes = Array.prototype.slice.call(p);
5、替换字符串中的特定索引
您可以使用 slice() 函数创建替换函数。
String.prototype.append = function (index,value) { return this.slice(,index) + value + this.slice(index);};
var s = "Happy year";alert(s.append(6,"new "));
结论
学习 JavaScript 内置函数的用例可以帮助您提高编码技能。您可以在需要时使用您的知识。您可以优雅地实现功能。
slice() 也是一个有用的内置函数。如果您知道如何使用它,则可以在遇到需要使用它的问题时使用它。您可以使用 slice() 轻松获取数组的副本。
总结一下,本文中 slice() 的用例如下:
  • 复制数组

  • 构造一个从 n 开始的子数组

  • 将类数组对象转换为数组

  • 将 NodeList 转换为数组

  • 替换字符串中的特定索引




分享好友

分享这个小栈给你的朋友们,一起进步吧。

Java小专栏
创建时间:2019-08-08 21:32:06
Java专栏专注技术分享
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • lihong
    栈主

小栈成员

查看更多
  • 栈栈
  • 杨三百
  • at_1
  • gaokeke123
戳我,来吐槽~