Array中有哪些非破坏性方法?
- • 非破坏性方法:调用的时不会改变原始的数组:例如:
filter、some、map、find、join、concat、forEach、every、reduce、flat、slice
- • 破坏性方法:与破坏性方法相反,例如:
sort、reverse、splice、push、pop、shift、unshift
- • 新的数组非破坏性方法:
toSorted、toReversed、with、toSpliced
1. toSorted()
- • 用法:
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); }; }
2. toReversed()
- • 用法:
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(); }; }
3. with()
- • 用法:
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; }; }
4. toSpliced()
- • 用法:
.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)