首页 > 试题广场 >

以下哪些选项可以将集合A转化为数组?

[不定项选择题]
以下哪些选项可以将集合A转化为数组?
  • Array.from(A)
  • [].slice.apply(A)
  • […A]
  • [].map.call(A, o => o)
  1. Array.from(arr, mapfn,thisArg)方法,用于将两类可以把对象转换为真正的数组:类似数组的对象和可遍历的对象(部署了Iterator接口的,String,ES6新增的Map和Set)。可以传3个参数,其中第一个是数组,必传;第二个是一个函数(类似map函数),对数组元素进行操作后再返回数组,可选;第三个是对于this关键字的指向,可选。
  2. slice() 方法可从已有的数组中返回选定的元素。
    返回值:返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。
    说明
    请注意,该方法并不会修改数组,而是返回一个子数组。如果想删除数组中的一段元素,应该使用方法 Array.splice()。
    所以在这里就是对集合A应用slice,返回一个新的数组,不对数组做任何改变。
  3. 展开运算符,把A集合的元素展开后,用数组[]承载,返回新的数组。
  4. map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
    map() 方法按照原始数组元素顺序依次处理元素。
    注意: map() 不会对空数组进行检测。
    注意: map() 不会改变原始数组。
    所以map方法返回了一个新的数组,并且数组中每个元素是A里面的元素。

综上,选择ABCD。
编辑于 2019-08-20 10:30:20 回复(3)
ac就不说了 高赞说的很清楚了 说下bd 下面都是自己的实验和猜测 嫌长可以只看最后的结论
( ͡° ͜ʖ ͡°)✧ 有不对的地方希望可以提出~ 我会及时改正的
使用[].slice.apply(A),[].map.call(A)可以转为数组 但是无法把A中的元素放在数组里面
首先:只要使用[].slice.apply()不管里面的第一个参数是什么 这个对象都会返回一个数组

但是当参数中含有length属性的时候 会返回一个长度为属性值的数组 并且会把对象中下标<length的元素放到数组里面对应的下标位置中去

对于字符串:在执行[].slice.apply()的时候会把它包装成String对象 可以推测number类型和boolean类型也都会被包装

对于可迭代对象:与slice方法无关 太长了这里就不写了..大家可以自己试试
//下面是创建一个可迭代对象
var obj3 = {  
    a: 1,  
    b: 2,   
    [Symbol.iterator](){}//里面是创建可迭代对象的代码
[].slice.apply(obj3)//[] 可见这个方法和可迭代对象无关

得出结论:slice方法的工作原理是根据上下文对象中的length属性建立一个length长度的数组 然后寻找对象中key值为数字的属性并且添加到数组里面 对于没有length属性的对象 默认length=undefined 返回的数组为空

对于map:上面的代码 使用[].map.call()和[].slice.apply()的结果是一样的

可以推测map的工作原理和slice类似 大概是是根据上下文对象中的length属性建立一个length长度的数组 然后只遍历下标为数字的数组并且放到数组中对应下标的位置里 而且下标大于length的元素是不会被遍历的

编辑于 2020-03-01 16:10:54 回复(3)

题目明明是form。。。

牛客:我写了错别字,有时是考你语文。有时不是,我只是写错了而已

我:操!

发表于 2019-12-29 12:29:20 回复(5)
试验了一下。B,D是错的,map和slice接受类数组对象,而set是可迭代对象,所以只会返回一个空数组。
发表于 2021-02-15 14:18:55 回复(0)
验证结果
1. A:

2.B:

3.C:

4.D: 

发表于 2020-04-29 17:59:23 回复(2)
var a = new Set([1, 2])
[].slice.apply(a) // []
[].map.call(a, o => o) // []
Array.from(a) //  [1, 2]
[...a] // [1, 2]
B,D不对吧
发表于 2020-02-25 19:08:10 回复(2)
个人认为, B、D之所以错误可能是可以将任意集合转换为数组,但是对于Set 和Map这些数据集合B、D是无法转换得到一个数组的
发表于 2020-12-05 12:05:13 回复(1)
可能是我理解有误,当我们谈集合转数组的时候,我们在谈的不是将集合元素转化为数组元素么
集合不像伪数组对象,既没有 0, 1, 2, 3 ... 这样的 key 也没有 length 属性。那 B 和 D 究竟是怎样做到的
发表于 2019-08-26 11:20:32 回复(0)
B 答案有问题啊 
let set = new Set();
set.add(1);
set.add(2);
[].slice.apply(set)  =>   []; 没有得到 [1,2]

发表于 2022-01-06 16:08:02 回复(1)

得出结论:slice方法的工作原理是根据上下文对象中的length属性建立一个length长度的数组 然后寻找对象中key值为数字的属性并且添加到数组里面 对于没有length属性的对象 默认length=undefined 返回的数组为空

对于map:上面的代码 使用[].map.call()和[].slice.apply()的结果是一样的

可以推测map的工作原理和slice类似 大概是是根据上下文对象中的length属性建立一个length长度的数组 然后只遍历下标为数字的数组并且放到数组中对应下标的位置里 而且下标大于length的元素是不会被遍历的

编辑于 2020-03-01 16:10:54
发表于 2020-05-21 11:00:25 回复(0)
BD根本做不到,使用call来指定上下文已达到调用方法的目的,但是很明显map以及set中不具有和数组方法同名的,因此指定最终的结果也是无效的,这就是为什么结果是空的原因
编辑于 2020-08-31 21:16:31 回复(0)
这里假设 A 是类数组对象,为'fafsdafg',一个字符串
[].slice.apply(A),调用数组原型上的方法,但是其中的 this 改成了字符串,字符串原型上也有个slice 方法,但是它这个方法无法得到字符串,使用数组的slice 可以得到一个数组。
发表于 2023-02-13 15:35:02 回复(0)
Array.from() 方法对一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例。
三个参数为
arrayLike:想要转换成数组的伪数组对象或可迭代对象。
{
伪数组对象:拥有一个 length 属性和若干索引属性的任意对象
 可迭代对象:可以获取对象中的元素,如 Map 和 Set 等
}
mapFn 可选:如果指定了该参数,新数组中的每个元素会执行该回调函数。
thisArg 可选:执行回调函数 mapFn 时 this 对象。
编辑于 2022-09-24 20:54:13 回复(0)
只有AC是对的
发表于 2022-09-21 15:17:19 回复(0)
map和set并不属于类数组对象

类数组对象:

(1)定义

拥有 length 属性

若干索引属性的任意对象

(2)举例

NodeList

HTML Collections

字符串

arguments

$ 返回的 jQuery 原型对象

(3)类数组对象转数组

新建数组,遍历类数组对象,将每个元素放入新数组

Array.prototype.slice.call(ArrayLike) 或 [].slice.call(ArrayLike)

Array.from(ArrayLike)

apply 第二参数传入,调用数组方法
另外Array.from处理对于类数组对象可用之外,对于Map和Set也并不排斥

发表于 2022-08-31 16:04:12 回复(0)
这题是在考语文?首先集合和数组,集合的定义目前在 JS 有 Map,Set,其它集合我就不知道了,还有数组,如果这个数组是指集合转换的数组那么 BD 是错的,如果是单指数组,那返回空数组也是数组,那 BD 没问题
发表于 2022-01-06 22:25:59 回复(0)
请问什么集合?Map? Set? NodeList? arguments?
发表于 2021-09-19 10:41:15 回复(0)
var A = new Map();
map.set('aName', 'aValue');
map.set('bName', 'bValue');

console.log(Array.from(A)); // [['aName', 'aValue']. ['bName', 'bValue']]
console.log([...A]); //  [['aName', 'aValue']. ['bName', 'bValue']]
console.log([].slice.apply(A)); // []
console.log([].map.call(A, o => o)); // []



发表于 2021-07-16 11:44:30 回复(0)
集合(set)
发表于 2021-03-02 14:48:31 回复(0)
<p>集合是什么?</p>
发表于 2020-09-16 23:29:18 回复(0)