为什么改了JS数组中的一个元素的值,其他数组元素值都跟着变了

原因:

  数组是引用类型,数组变量存储在栈,元素数据存储在堆中,将数组赋值不同的对象,所以的赋值对象都指向堆同一个数据,所以改变其中一个数组中的元素,别的数组元素也会改变。

解决方案:

  原理就是先把数组转换成字符串再转换成对象 ,这样会新分配一块内存,就不会指向同一个堆中的数据。

   例子1: var tmp = JSON.parse(JSON.stringify(array));

原文地址:https://www.cnblogs.com/KevinTong/p/11414770.html

时间: 2024-10-12 12:37:24

为什么改了JS数组中的一个元素的值,其他数组元素值都跟着变了的相关文章

JS实现数组中每一个元素出现的次数

一.var arrayObj = [1, 1, 2, 3, 3, 3, 4, 5, 5]; 找出数组中每一个元素出现的次数,我这里简单一下就用for循环来实现.首先先声明几个变量, var temp = "";//中间变量,临时存储循环时用来存储数组中的某个元素 var count = 0;//循环时用来存储数组中的某个元素出现的次数 var arrNew = new Array(); //新建一个数据用来存放循环后的数据 下面开始循环 for(var i=0;i<arrayOb

js选择颜色小游戏(随机生成不含重复数字的数组,通过数组中的数控制定义好的数组)

<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>js网页版小游戏</title> <style media="screen"> .wrap { width: 577px; outline: 1px solid hotpink; margin: 100px auto; box-shadow: 0 0 5px; } .

24、输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变.  思路:新建一个数组先把原数组中的奇数push进去再把偶数push进去,然后用新数组数据覆盖原数组即可 复杂度O(n),用空间换时间 class Solution { public:     void reOrderArray(vector<int> &array) {         vector<int&

动态数组,数组初始化,数组内存释放,向数组中添加一个元素,向数组中添加多个元素,数组打印,顺序查找,二分查找,查找数组并返回地址,冒泡排序,改变数组中某个元素的值,删除一个数值,删除所有,查找含有

 1定义接口: Num.h #ifndef_NUM_H_ #define_NUM_H_ #include<stdio.h> #include<stdlib.h> /************************************************************************/ /*数组的结构体类型                                                    */ /*******************

C#如何删除数组中的一个元素

C#如何删除数组中的一个元素,剩余的元素组成新数组,数组名不变double[] arr = new double[n];需要删除的是第m+1个数据arr[m]求新数组arr.(新数组arr包含n-1个元素)m,n数值已知 double[] arr = new double[50]; List<double> list = arr.ToList(); list.RemoveAt(5+1); double[] newarr = list.ToArray(); 转:http://www.zybang

【C语言】在两个数成对出现的数组中找到一个单独的数。

//在两个数成对出现的数组中找到一个单独的数.比如{1,2,3.3,1,4.2},即找出4 #include <stdio.h> int find(int arr[], int len) { int i = 0; int ret = 0; for (i = 0; i < len; i++) { ret = ret^arr[i]; } return ret; } int main() { int arr1[] = { 1, 2, 2, 3, 1, 5, 3 }; int arr2[] =

在数组中添加一个元素进行(替换 删除 插入)

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //可变数组继承不可变数组 //1.创建  设定元素个数进行创建 NSMutableArray *mutArr=[NSMutableArray arrayWithCapacity:7]; //2.向数组中添加一个元素 NSArray *[email protected][@"MON",@

面试题3:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。

package siweifasan_6_5; /** * @Description:在一个长度为n的数组里的所有数字都在0到n-1的范围内. * 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次. * 请找出数组中任意一个重复的数字. * 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2. * @Parameters: // Parameters: // numbers: an array of integers //

判断一个数能否通过一个数组中的数相乘而得到(数组中的数使用次数不限)

题目:判断一个数能否通过一个数组中的数相乘而得到(数组中的数使用次数不限) 例如:第一行输入目标数x,第二行再输入一个数组(每个数用空格隔开),如果能则输出1,不能则输出-1: 输入例1: 20 2 3 5 7 输出: 1 解释:20 = 2*2*5,可以组成,所以输出1. 输入例2: 20 3 5 7 输出: -1 解释:无法组成,所以输出-1. 解题思路:转化成完全背包问题来解决(因为每个因子都可以使用无限次) #include <iostream> #include <bits/s

在递增数组中找一个数字

让人瑟瑟发抖的面试题... 来我们看一下题目在一个二维数组中,每一行都按照从左到右递增的顺序操作.每一列都按照从上到下递增的顺序排序.完成代码,输入这样一个二维数组和一个整数,判断数组是否含有该整数 怎么解决勒???分析:如果二维数组是这样,为了解决问题完全可以把数组遍历一遍,但是为了效率,我们需要把时间复杂度降低,为了遍历最少的数字,我们需要把行和列分开.所以,我们会从数组中找一个数字进行判断,然而,随便找一个数字,只会让问题变的跟复杂,比如,找一个10,左边和上边都比10小,而下边和右边都比