发布于 2024 年 2 月 26 日,星期一
非破坏性方法是指在操作数组时不会改变原数组的方法,如map、filter、concat等。这些方法通过返回新数组来实现功能,保持了原数组的完整性,便于在复杂逻辑中进行链式操作和数据追踪。非破坏性方法的本质在于它们提供了一种安全、可预测的方式来处理数据,避免了因直接修改原数组而引发的潜在错误和副作用,是现代前端开发中处理数据的重要工具。
极度投入,深度沉浸,边界清晰
前端小菜鸡一枚,分享的文章纯属个人见解,若有不正确或可待讨论点可随意评论,与各位同学一起学习~
欢迎关注
『沉浸式趣谈』
公众号 ,一起探索学习前端技术......公众号回复
加群
或扫码
, 即可加入前端交流学习群,长期交流学习......公众号回复
加好友
,即可添加为好友
filter、some、map、find、join、concat、forEach、every、reduce、flat、slice
sort、reverse、splice、push、pop、shift、unshift
toSorted、toReversed、with、toSpliced
const array = ['c', 'o', 'n', 'a', 'r', 'd', 'l', 'i'];const result = array.toSorted();console.log(result); // ['a', 'c', 'd', 'i', 'l', 'n', 'o', 'r']console.log(array); // ['c', 'o', 'n', 'a', 'r', 'd', 'l', 'i']
/**
* 测试
*/const arr = [1, 5, 8, 1, 5, 1, 8, 1, 8, 4, 31, 8, 4, 48, 751, 81, 1, 5, 7, 1, 5, 3, 5];if (!Array.prototype.toSorted) { Array.prototype.toSorted = function (compareFn) { return this.slice().sort(compareFn); };}let res = arr.toSorted((a, b) => a - b);console.log(1111, res); // [1, 1, 1, 1, 1, 1, 3, 4,4, 5, 5, 5, 5, 5, 7, 8,8, 8, 8, 31, 48, 81, 751 ]// 实现/**
* compareFn:排序的方法:
* 例如:
* 升序:(a, b) => a - b
* 降序:(a, b) => b - a
*/if (!Array.prototype.toSorted) { Array.prototype.toSorted = function (compareFn) { return this.slice().sort(compareFn); };}
const array = ['c', 'o', 'n', 'a', 'r', 'd', 'l', 'i'];const result = array.toReversed();console.log(result); // ['i', 'l', 'd', 'r', 'a', 'n', 'o', 'c']console.log(array); // ['c', 'o', 'n', 'a', 'r', 'd', 'l', 'i']
/**
* 测试
*/const arr = [1, 5, 8, 1, 5, 1, 8, 1, 8, 4, 31, 8, 4, 48, 751, 81, 1, 5, 7, 1, 5, 3, 5];if (!Array.prototype.toReversed) { Array.prototype.toReversed = function () { return this.slice().reverse(); };}let res = arr.toReversed();console.log(1111, res); // [5, 3, 5, 1, 7, 5, 1, 81,751, 48, 4, 8, 31, 4, 8, 1,8, 1, 5, 1, 8, 5, 1 ]// 实现if (!Array.prototype.toReversed) { Array.prototype.toReversed = function () { return this.slice().reverse(); };}
array[index] = value
const array = ['c', 'o', 'n', 'a', 'r', 'd', 'l', 'i'];const result = array.with(0, 'ConardLi');console.log(result); // ['ConardLi', 'o', 'n', 'a', 'r', 'd', 'l', 'i'];console.log(array); // ['c', 'o', 'n', 'a', 'r', 'd', 'l', 'i']
/**
* 测试
*/const arr = [1, 5, 8, 1, 5, 1, 8];if (!Array.prototype.with) { Array.prototype.with = function (index, value) { const copy = this.slice(); copy[index] = value; return copy; };}let res = arr.with(4, 'xxx');console.log(1111, res); // [1, 5, 8, 1, 5, 'xxx', 1, 8,]console.log(2222, arr); // [1, 5, 8, 1, 5, 1, 8,]// 实现if (!Array.prototype.with) { Array.prototype.with = function (index, value) { const copy = this.slice(); copy[index] = value; return copy; };}
.toSpliced(start, deleteCount, ...items)- 它从 start 开始删除 deleteCount 个元素 ;- 然后把 items 插入到被删除的位置;- 最后返回已删除的元素。const array = [1, 2, 3, 4, 5, 6];const result = array.splice(1, 2, 0);console.log(result); // [2, 3]console.log(array); // [1, 0, 4, 5, 6]
/**
* 测试
*/const arr = [1, 5, 8, 1, 5, 1, 8];if (!Array.prototype.toSpliced) { Array.prototype.toSpliced = function (start, deleteCount, ...items) { const copy = this.slice(); copy.splice(start, deleteCount, ...items); return copy; };}let res = arr.toSpliced(1, 2, 0); // [ 1, 0, 1, 5, 1, 8 ]console.log(1111, res);// 实现if (!Array.prototype.toSpliced) { Array.prototype.toSpliced = function (start, deleteCount, ...items) { const copy = this.slice(); copy.splice(start, deleteCount, ...items); return copy; };}
Q:(question)
R:(result)
A:(attention matters)
D:(detail info)
S:(summary)
Ana:(analysis)
T:(tips)
『沉浸式趣谈』
公众号 ,一起探索学习前端技术......加群
或 扫码
, 即可加入前端交流学习群,长期交流学习......加好友
,即可添加为好友