首页 > 试题广场 >

请问下面哪种方式可以在不改变原来数组的情况下,拷贝出数组 b

[不定项选择题]

请问下面哪种方式可以在不改变原来数组的情况下,拷贝出数组 b ,且满足 b!=a 。例如数组 a [1,2,3]

  • let b=a;
  • let b=a.slice();
  • let b=a.splice(0,0);
  • let b=a.concat();
slice和concat方法均返回新数组,而splice方法的主要作用就是对原数组进行增删改操作,返回值为截取删除掉的子数组
发表于 2017-07-23 14:02:54 回复(3)
A选项 b=[1,2,3]   b==a
B选项 b=[1,2,3]   b!=a
C选项 b=[]           b!=a
D选项 b=[1,2,3]   b!=a

所以正确答案应该是BD
编辑于 2017-08-21 20:32:50 回复(11)
A.该选项相当于直接将数组a的值传递给了b,换而言之,通过‘=’来进行操作,a与b是完全相同的.
B.slice()方法是将用于切片操作,方法slice会携带两个参数,其形式是slice(begin,end),其中begin为切片操作的起始元素下标,end为切片操作的末尾元素的下标,但是二者不同的是,begin作为起始元素的下标,该元素是可以被截取到的,而end所对应的末尾元素是无法被截取到的,用数学上面的集合来表示就是[begin,end)
不过需要额外注意的是,在本题中的slice指的是array中的slice的语法,在Array语法中,slice并不被要求一定给出参数begin和end的具体数值,也就是说slice()这样的调用方式是被允许的,在进行slice()方法调用的时候,其应该会默认浅拷贝数组a中的所有元素,b数组中的元素也就会变成[1,2,3]
但是需要注意,之所以数组b不等于数组a的原因在于,slice()方法是通过浅拷贝数组a的元素来创建一个新的数组,这也就使得数组a与b的地址并不相同,所以数组a与b仅仅只是里面包含的元素相同,而不是等价的.换而言之,我们在对经过拷贝的数组b进行操作的时候,并不会影响原先数组a的值.
C.splice()方法实现了从原数组截取一部分放到新数组中的操作,但是在这个操作后,会将原数组的全部元素删除,这个操作违背了题目的要求—不改变原数组
D.concat()方法是将两个或多个数组连接到一起,其形式是concat(valueN),其中参数可以携带多个(concat(value0,value1…))或者不携带参数(concat( )),当concat方法以无参的形式被调用的时候,concat方法将对a进行浅拷贝,将数组a的数据拷贝给b.
与slice()方法相同的是,新建立的数组b并不会与数组a产生影响,二者均为独立的数组,当然这也就意味着,数组a不等于数组b.

发表于 2022-09-29 16:30:16 回复(2)
A,b与a相同引用,b===a B,slice方法删除原数组元素,并返回删除的元素作为新数组 C,不改变原数组,但返回原数组的0开始,长度为0的元素,为空 D,返回新数组并不改变原数组
编辑于 2018-12-09 12:22:29 回复(5)
通过slice,concat返回a,b值相等,为什么又说a!=b。因为数组是对象,返回一个新的数组地址不同,两个不同地址的对象是不相等的
发表于 2018-07-05 00:25:29 回复(0)

(#)首先,题目有两个关键点

(1)不改变原数组 (slice显然可行)

(2)拷贝出新数组 (=和splice(0,0)两个操作都不行,其中=符号直接引用原数组,splice直接是对原数组截取)

(3)故而选BD


(#)有人纠结B选项,认为语法有误,这是不存在的, 这个得注意一下标准,标准不同,参数不同,再者注意是Array中的slice语法,可以参考几个文档

(##)start为必要参数的文档


1.https://msdn.microsoft.com/zh-cn/library/tkcsy6fe(v=vs.94).aspx


2.http://www.w3school.com.cn/jsref/jsref_slice_array.asp https://m.runoob.com/jsref/jsref-slice-array.html


(##)start为非必要参数的文档


1.https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/slice

编辑于 2020-11-14 02:22:41 回复(3)

这是哪门语言呢

发表于 2017-09-16 10:53:18 回复(0)

发表于 2017-11-02 21:01:24 回复(1)
concat是复制一个新的出来,那么b和a完全一样啊!b!=a不满足呀?
发表于 2017-08-22 09:34:52 回复(3)
JavaScript的,完全不懂
发表于 2022-10-29 11:47:25 回复(0)
slice是返回数组的浅拷贝,不改变原来数组,所以B也是对的,并且slice的两个参数都可以省略。
编辑于 2020-05-07 23:02:51 回复(0)
slice(),必须传一个参数
发表于 2019-04-22 17:25:16 回复(1)
没见过这玩意,纯瞎选
发表于 2022-10-03 20:47:03 回复(0)
(#)首先,题目有两个关键点 (*)不改变原数组 (slice显然可行) (**)拷贝出新数组 (slice(0,0), =不行) (@)故而选BD (##)有人纠结B选项,认为语法有误,这是不存在的, 这个得注意一下标准,标准不同,参数不同,再者注意是Array中的slice语法,可以参考几个文档 (%)start为必要参数的文档 1.https://msdn.microsoft.com/zh-cn/library/tkcsy6fe(v=vs.94).aspx 2. (%%)start为非必要参数的文档 1.https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/slice 2.http://www.w3school.com.cn/jsref/jsref_slice_array.asp https://m.runoob.com/jsref/jsref-slice-array.html
发表于 2020-01-02 17:25:20 回复(0)
splice数组是对原数组进行增删改查操作 返回值是操作后的新数组
发表于 2023-11-14 11:56:17 回复(0)
这是Java吗,咋没见过啊
发表于 2023-06-05 23:00:14 回复(0)
****,选java的题结果还是出来js、cpp的
编辑于 2023-03-05 20:15:30 回复(0)
C选项我有一个疑问啊,splice方法确实是改变原数组的,但是题目中a.splice(0,0),a并没有发生改变呀,b是一个空数组,所以b!=a  也满足呀
发表于 2022-12-30 11:54:59 回复(1)
看的很懵
发表于 2022-03-16 17:04:56 回复(0)