数组 复制 拷贝 相等判断

js 数组的拷贝(不影响原数组),数组相等判断

数组拷贝

数组属于引用类型;简单的赋值只是添加了一个指向数组的指针;ex:

var a = [1,2,3];
var b = a;
b.push(2);
console.log(a)//[1,2,3,2]

对新数组 b 的操作同样会改变原始数组 a 

那么如何实现独立的拷贝?介绍下面两种方法:两种方法性能上相差不大,不同浏览器内核上各有千秋:

//方法1
var a = [1,2,3];
var b = a.slice();
a.reverse;
console.log(a);//[3,2,1]
console.log(b);//[1,2,3]
//方法2
var c = [4,5,6];
var d = c.concat();
c.reverse();
console.log(c);//[6,5,4]
console.log(d);//[4,5,6]

//数值复制拷贝例子  多维数组
//var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango", ["Banana", "Orange", "Lemon", "Apple", "Mango"]];
//var myBest = fruits.slice(0);
//myBest.push("hello");
//myBest.push({ name: "hao", age: 12 });
//var d = myBest.concat();
//d.reverse();
//console.dir(myBest);//不改变原始数组
//console.dir(d); //不改变原始数组
//console.dir(fruits);

 ----------------------------------------------------------------------

改变原数组的方法:

  1. pop();删除尾部的第一个元素并且返回这个元素;
var a = [1,2,3];
var b = a.pop();
console.log(a);//[1,2]
console.log(b);//3
  1. 类似方法: 
    push();尾部推入;返回数组长度; 
    shift();顶部弹出;返回该元素; 
    unshift();顶部亚入;返回数组长度;
  2. reverse();反转数组;返回反转后的数组;
  3. splice();常用方法;返回被删除的数组成的数组,可以为[];

不改变原数组的方法:

  1. concat:返回拼接后的数组,不改变原数组;
  2. forEach;
  3. map;
  4. join();返回拼接后的字符串,可以指定间隔;
//attention:
[1,2,3].join(‘‘)
//"123"
[1,2,3].join()
//"1,2,3"
  1. slice(start,end);截取数组,返回截取的部分,不改变原始数组;
  2. sort();排序;传入一个函数作为参数,可以控制为升序,降序或者随机;(try用来产生随机数);
  3. toString();[1,2,3].toString()==[1,2,3].join();

数组相等判断

先说下坑吧: 
任意两个数组相等都会返回false;[]=[];//false 
怎么办?千万不要逐项去比较,看看上面可用的方法:toString(); 
转化为字符串一次就比较完了。

转载来源:http://blog.csdn.net/lance_10030/article/details/75258204?locationNum=1&fps=1

原文地址:https://www.cnblogs.com/hao-1234-1234/p/8525508.html

时间: 2024-10-13 17:39:26

数组 复制 拷贝 相等判断的相关文章

PHP 数组的拷贝是按值传递 or 按引用传递

在记忆中 PHP 简单变量的拷贝是按值传递,数组和对象的拷贝是按引用传递,即通过引用来实现. 简单变量和对象好理解: <?php // 简单变量的拷贝 $a = 'human'; $b = $a; $b = 'cat'; var_dump($a); // string 'human' (length=5) // 对象的拷贝 class A{} $a = new A(); $b = $a; $b->name = 'jack'; var_dump($a); // object(A)[1] publ

javascript数组操作(创建、元素删除、数组的拷贝)

这篇文章主要介绍了javascript数组操作,包括创建.元素的访问.元素删除.数组的拷贝等操作,还有其它示例,需要的朋友可以参考下 1.数组的创建 复制代码 代码如下: var arrayObj = new Array(); //创建一个数组var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度var arrayObj = new Array([element0[, element1[, ...[, elementN]]]]); 创

AHK 找字找图,大漠调用实例演示[搬运][复制][拷贝][副本][备份]

;~  AHK 找字找图,大漠调用实例演示[搬运][复制][拷贝][副本][备份] ;~ https://www.autoahk.com/?p=16306;~ https://gitee.com/weiyunwps618/codes/t41vlkhpy0m3wr9568cua42;~ https://www.cnblogs.com/delphixx/p/11835278.html /* https://www.autohotkey.com/boards/viewtopic.php?t=17834

利用concat进行数组复制

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>数组复制</title> </head> <body> <script type="text/javascript"> var arr1 = [1,3,5,6,7]; var arr2 = arr1.c

复制拷贝函数+重载operator=

首先,如下写法: Class A = B; Class A; A = B; 并不等价,前者等价于A(B),后者等价于A.operator=(B) 问题源于我想要用类似如下写法完成复制拷贝函数 Class(Class &t) { *this = t; } 尝试重载operator=,由于写挂了,或者说是return错误的对象,导致死循环或者编译不通过 1.死循环: 关键在于对复制拷贝函数的理解(什么时候会调用),如果函数的形参不是引用,或者return一个非引用的对象, 就会调用复制拷贝函数,而我

Objective-C:OC内部可变对象和不可变对象的深(复制)拷贝问题思考:

OC内部:可变对象和不可变对象的深(复制)拷贝问题思考: 不可变对象: 例如NSString对象,因为NSString对象是常量字符串,所以,不可以更改其内容,但是可以修改指向该字符串的指针指向.当对NSString对象做深拷贝时,如果是copy复制方式,其实就是浅复制,只是复制了同一个对象的指针:如果是mutableCopy复制方式,系统会分配一个新的内存空间用来存放复制出来的NSMutableString对象,此时地址是新的,内容是一样的,他们正在被不同的实例变量字符串指针指着. 可变对象:

求一个整型数字中有没有相同的部分,例如12386123这个整型数字中相同的部分是123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。方法是先将整型数字转换到数组中,再判断。函数为 int same(int num)其中num是输入的整型数字

import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Test { public static void main(String[] args) { /** * 2.求一个整型数字中有没有相同的部分,例如12386123这个整型数字中相同的部分是123, * 相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0. * 方法是先将整型数字转换到数组中,再判断.

java数组复制的几种常见用法

1.1数组复制的几种常见用法 1.1.1System.arraycopy的用法 int[] src = {1,3,5,7,9,11,13,15,17}; int[] dest = {2,4,6,8,10,12,14,16,18,20}; //从src中的第一个元素起复制三个元素,即1,3,5复盖到dest第2个元素开始的三个元素 System.arraycopy(src, 0, dest, 1, 3); System.out.println(Arrays.toString(dest)); 结果为

C语言 二维数组复制、清零及打印显示

#include <stdlib.h> #include <stdio.h> #include <string.h> //二维整型数组打印显示 void printarr2d(int (*a)[3],int row,int col) { int i,j; for(i=0; i<row; i++) { for(j=0; j<col; j++) { printf("%d ", a[i][j]); } printf("\n"