hdfs中与file数组类似的数组_如何在 JavaScript 中克隆数组
作者:Yazeed Bzadough
译者:allen
JavaScript 有很多方法可以做任何事情,现在我们研究数组。
1.扩展运算符(浅拷贝)
自从 ES6 发布以来,这一直是最受欢迎的方法。这是一个简短的语法,你会发现它在使用像 React 和 Redux 这样的库时非常有用。
numbers = [1, 2, 3];
numbersCopy = [...numbers];
注意:这不能安全地复制多维数组。数组/对象值通过引用而不是按值复制。
这可以
numbersCopy.push(4);
console.log(numbers, numbersCopy);
// [1, 2, 3] and [1, 2, 3, 4]
// numbers is left alone
这不可以
nestedNumbers = [[1], [2]];
numbersCopy = [...nestedNumbers];
numbersCopy[0].push(300);
console.log(nestedNumbers, numbersCopy);
// [[1, 300], [2]]
// [[1, 300], [2]]
// They've both been changed because they share references
2.for 循环(浅拷贝)
由于我们的圈子中流行的函数式编程,使得这种方法最不受欢迎
numbers = [1, 2, 3];
numbersCopy = [];
for (i = 0; i < numbers.length; i++) {
numbersCopy[i] = numbers[i];
}
注意:这不能安全地复制多维数组。由于你使用的是=运算符,因此它将通过引用而不是值来分配对象/数组。
这可以
numbersCopy.push(4);
console.log(numbers, numbersCopy);
// [1, 2, 3] and [1, 2, 3, 4]
// numbers is left alone
这不可以
nestedNumbers = [[1], [2]];
numbersCopy = [];
for (i = 0; i < nestedNumbers.length; i++) {
numbersCopy[i] = nestedNumbers[i];
}
numbersCopy[0].push(300);
console.log(nestedNumbers, numbersCopy);
// [[1, 300], [2]]
// [[1, 300], [2]]
// They've both been changed because they share references
3.while 循环(浅拷贝)
同 for 循环一样,不纯的、命令式的, blah, blah, blah... 但有效!
numbers = [1, 2, 3];
numbersCopy = [];
i = -1;
while (++i < numbers.length) {
numbersCopy[i] = numbers[i];
}
注意:这也通过引用而不是按值分配对象/数组。
这可以
numbersCopy.push(4);
console.log(numbers, numbersCopy);
// [1, 2, 3] and [1, 2, 3, 4]
// numbers is left alone
这不可以
nestedNumbers = [[1], [2]];
numbersCopy = [];
i = -1;
while (++i < nestedNumbers.length) {
numbersCopy[i] = nestedNumbers[i];
}
numbersCopy[0].push(300);
console.log(nestedNumbers, numbersCopy);
// [[1, 300], [2]]
// [[1, 300], [2]]
// They've both been changed because they share references
4.Array.map (浅拷贝)
回到现代领域,我们将找到 map 函数,基于数学,map 是将一组转换为另一种类型的集合,同时保留结构的概念。
这意味着 Array.map 每次都返回一个长度相同的数组。
要使列表中数字加倍,可以使用 map 带加倍函数
numbers = [1, 2, 3];
double = (x) => x * 2;
numbers.map(double);
什么是克隆
没错,这篇文章是关于克隆数组的。要复制数组,只需返回 map 调用中的元素即可。
numbers = [1, 2, 3];
numbersCopy = numbers.map((x) => x);
如果你想更数学一点,(x)=> x 被称为身份。它返回给出的任何参数。
map(identity) 复制一个列表
identity = (x) => x;
numbers.map(identity);
// [1, 2, 3]
注意:这也通过引用而不是按值分配对象/数组。
5.Array.filter (浅拷贝)
此函数返回一个数组,就像 map 一样,但它不能保证长度相同。
如果你要过滤偶数数字怎么办?
[1, 2, 3].filter((x) => x % 2 === 0)
// [2]
输入数组长度为3,但结果长度为1。
如果 filter 始终返回 true,就会重复
numbers = [1, 2, 3];
numbersCopy = numbers.filter(() => true);
每个元素都通过测试,因此返回。
注意:这也通过引用而不是按值分配对象/数组。
6.Array.reduce (浅拷贝)
使用 reduce 来克隆数组感觉非常不好,因为它远比此强大,让我们开始...
numbers = [1, 2, 3];
numbersCopy = numbers.reduce((newArray, element) => {
newArray.push(element);
return newArray;
}, []);
reduce 在循环遍历列表时转换初始值。
这里的初始值是一个空数组,我们将逐步填充每个元素。必须从要在下一次迭代中使用的函数返回该数组。
注意:这也通过引用而不是按值分配对象/数组。
7.Array.slice (浅拷贝)
slice 根据你提供的开始/结束索引返回数组的副本。
如果我们想要前3个元素:
[1, 2, 3, 4, 5].slice(0, 3);
// [1, 2, 3]
// Starts at index 0, stops at index 3
如果我们想要所有元素,请不要给出任何参数
numbers = [1, 2, 3, 4, 5];
numbersCopy = numbers.slice();
// [1, 2, 3, 4, 5]
注意:这也通过引用而不是按值分配对象/数组。
8.JSON.parse 和 JSON.stringify (深拷贝)
JSON.stringify 将对象转换为字符串
JSON.parse 将字符串转换为对象
组合它们可以将对象转换为字符串,然后反转该过程以创建全新的数据结构。
注意:这也通过引用而不是按值分配对象/数组。
nestedNumbers = [[1], [2]];
numbersCopy = JSON.parse(
JSON.stringify(nestedNumbers)
);
numbersCopy[0].push(300);
console.log(nestedNumbers, numbersCopy);
// [[1], [2]]
// [[1, 300], [2]]
// These two arrays are completely separate!
9.Array.concat (浅拷贝)
concat 将数组与值或其他数组组合在一起。
[1, 2, 3].concat(4); // [1, 2, 3, 4]
[1, 2, 3].concat([4, 5]); // [1, 2, 3, 4, 5]
如果你不提供任何内容或空数组,则返回副本。
[1, 2, 3].concat(); // [1, 2, 3]
[1, 2, 3].concat([]); // [1, 2, 3]
注意:这也通过引用而不是按值分配对象/数组。
10.Array.from (浅拷贝)
这可以将任何可迭代对象转换为数组。给数组返回一个副本。
numbers = [1, 2, 3];
numbersCopy = Array.from(numbers)
// [1, 2, 3]
注意:这也通过引用而不是按值分配对象/数组。
总结
嗯,这很有趣
我试着只用一步就克隆了。如果你采用多种方法和技术,你会发现更多方法。
hdfs中与file数组类似的数组_如何在 JavaScript 中克隆数组相关推荐
- javascript编写_如何在JavaScript中使用解构来编写更简洁,功能更强大的代码
javascript编写 by Ashay Mandwarya ?️?? 由Ashay Mandwarya提供吗? 如何在JavaScript中使用解构来编写更简洁,功能更强大的代码 (How to ...
- java+script+当前日期_如何在JavaScript中获取当前日期?
如何在JavaScript中获取当前日期? #1楼 您可以使用扩展了 Date对象的Date.js库,从而可以使用.today()方法. #2楼 如果您想对日期格式进行更多的粒度控制,我强烈建议您查看 ...
- javascript案例_如何在JavaScript中使用增强现实-一个案例研究
javascript案例 by Apurav Chauhan 通过Apurav Chauhan 如何在JavaScript中使用增强现实-一个案例研究 (How to use Augmented Re ...
- regexp 好汉字符串_如何在JavaScript中使用RegExp确认字符串的结尾
regexp 好汉字符串 by Catherine Vassant (aka Codingk8) 由凯瑟琳·瓦森(Catherine Vassant)(又名Codingk8) 如何在JavaScrip ...
- javascript字典中添加数组_如何在 JavaScript 中更好地使用数组
在 freeCodeCamp 社区阅读原文. 本文短小精悍,我保证.在过去的数个月里,我注意到在我审阅的 pull request 中有四个(关于数组使用的)错误经常出现.同时,我自己也会犯这些错误, ...
- javascript字典中添加数组_如何在JavaScript中使用数组方法:Mutator方法
JavaScript中的数组由元素列表组成.JavaScript有许多有用的内置方法来处理数组.修改原始数组的方法称为mutator方法,返回新值或表示的方法称为accessor方法.在本教程中,我们 ...
- java从数组查找指定整数_如何在Java中使用重复项查找整数数组中的K个缺失数字?...
java从数组查找指定整数 自从我讨论任何编码或算法面试问题以来已经有很长时间了,因此我想重新考虑一种最流行的基于数组的编码问题,即在给定数组中查找缺失的数字. 在进行编程工作面试之前,您可能已经听说 ...
- javascript中索引_如何在JavaScript中找到数字在数组中所属的索引
javascript中索引 Sorting is a very important concept when writing algorithms. There are all kinds of so ...
- java 格式化 浮点数_如何在javascript中格式化浮点数?
回答(13) 2 years ago 我猜的关键是首先正确地向上舍入,然后你可以将它转换为String . function roundOf(n, p) { const n1 = n * Math.p ...
最新文章
- Kotlin 数组的使用
- win7下,发布到iis上,本地可以正常访问,远程访问失败
- printf/scanf格式控制符的完整格式
- 让TP5.0在SWOOLE上飞起来
- Swift傻傻分不清楚系列(二)数据类型
- Linux杂碎2/SHELL
- java微信支付异步通知_Java中微信支付退款异步通知解码
- sql server 缓存_了解SQL Server查询计划缓存
- JavaScript执行机制-node事件循环
- easyui datagrid 列的内容超出所定义的列宽时,自动换行
- 计算机网络连接限制,网络受限制或无连接怎么办?电脑网络连接受限制或无连接问题...
- EffNet图像分类--分类精子图片优化!
- mysql 2002_解决MySQL报错ERROR 2002 (HY000)
- R和RStudio安装包下载
- 流域水库水闸和泵站无人值守系统
- java-php-python-ssm企业人事管理系统计算机毕业设计
- 阿里云服务器上安装nginx
- 在线问答“三重门”:知识、营销与服务直达
- MATLAB的global变量
- 左耳听风 第二十二周
热门文章
- 【剑指offer】面试题49:丑数
- 3dmax体积雾渲染不出来_【扮家家云渲染效果图】3Dmax体积光制作丛林光束|干货教程...
- android 人脸识别_小模型,高精度!小视科技推出极致轻量型人脸识别SDK
- priority_queue实现大顶堆和小顶堆
- Python删除文件夹和建立文件夹
- python保存和加载数组
- 辗转相除法--最大公约数/最大公倍数
- 安卓逆向_15( 三 ) --- Android NDK 开发【 jni 静态注册、JNI_OnLoad 动态注册】
- p1和p7签名的区别
- ActiveMQ消费者平滑关闭