首页 > 其他分享 >以下哪些选项可以将集合A转化为数组?

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

时间:2023-11-08 15:02:13浏览次数:24  
标签:选项 map slice 对象 元素 length 数组 集合

A
Array.from(A)

B
[].slice.apply(A)

C
[…A]

D
[].map.call(A, o => o)

正确答案:ABCD

Array.from(arr, mapfn,thisArg)方法,用于将两类可以把对象转换为真正的数组:类似数组的对象和可遍历的对象(部署了Iterator接口的,String,ES6新增的Map和Set)。
可以传3个参数,其中第一个是数组,必传;第二个是一个函数(类似map函数),对数组元素进行操作后再返回数组,可选;第三个是对于this关键字的指向,可选。

slice() 方法可从已有的数组中返回选定的元素。
返回值:返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。
说明
请注意,该方法并不会修改数组,而是返回一个子数组。如果想删除数组中的一段元素,应该使用方法 Array.splice()。
所以在这里就是对集合A应用slice,返回一个新的数组,不对数组做任何改变。

展开运算符,把A集合的元素展开后,用数组[]承载,返回新的数组。

map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
map() 方法按照原始数组元素顺序依次处理元素。
注意: map() 不会对空数组进行检测。
注意: map() 不会改变原始数组。
所以map方法返回了一个新的数组,并且数组中每个元素是A里面的元素。
ES5中map会跳过空位但会保留这个值,ES6中将空位视为undefined

使用[].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的元素是不会被遍历的

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也并不排斥

只有AC是对的

标签:选项,map,slice,对象,元素,length,数组,集合
From: https://www.cnblogs.com/longmo666/p/17817413.html

相关文章

  • C语言程序设计 第四章 数组
    本节是学习C语言数组:一维数组,二维数组,字符数组。 下载图片格式的课件(PPT课件转换为JPG图片)(以图片方式查看,可以在MP4上查看) 下载Powerpoint课件(在装有PowerPoint的计算机上可以打开使用)......
  • 七、Java集合
    一、集合概述集合的特点如下:动态大小:集合可以根据需要动态调整大小,不像数组需要提前指定大小。灵活性:集合提供了各种不同类型的数据结构和容器,例如列表、集、映射、队列等,以满足不同的存储和操作需求。高效性:Java集合框架中的实现类经过优化,提供高效的插入、删除和查找......
  • Net 高级调试之六:对象检查之值类型、应用类型、数组和异常的转储
    一、简介今天是《Net高级调试》的第六篇文章。记得我刚接触Net框架的时候,还是挺有信心的,对所谓的值类型和引用类型也能说出自己的见解,毕竟,自己一直在努力。当然这些见解都是书本上的,并没有做到眼见为实,所以总是有些东西说不清楚。今天,我们就好好的说说C#的类型,是从......
  • C语言程序设计 练习题参考答案 第四章 (2) 二维数组
    /*4.165*5矩阵中每行的绝对值最大值,与同行对角线交换*/#include"stdio.h"#include"math.h"voidmain(){inta[5][5]={{1,2,3,4,-5},{3,5,-2,4,2},{4,1,2,3,-2},{1,3,-2,4,6},{2,2,0,7,4}};inti,k,max,sub,temp;/*i循环变量,控制行,k循......
  • C语言程序设计 练习题参考答案 第四章 (3) 字符数组
     /*  例4.19 电文加密,每个字母转换为字母表中循环右移的第三个字母,解法一 */#include"stdio.h"voidmain(){chars[256];inti=0;printf("请输入一行字符,之后按回车键\n");gets(s);while(s[i]!=0){if(s[i]>=65&&s[i]<=87)/*A-W*/......
  • C语言程序设计 练习题参考答案 第七章 (1) 指针与变量 指针与数组
    /*7.13输入三个整数,从小到大排序,(指针,函数实现交换)*/#include"stdio.h"#include"conio.h"voidswap(int*a,int*b,int*c);voidmain(){intx,y,z;printf("请输入三个整数,示例123\n");scanf("%d%d%d",&x,&y,&am......
  • C语言程序设计 第七章 指针与结构体 指针数组 例题
    /*---------------------------------------例7.19输入N个学生学号,姓名,成绩,并按成绩降序排列,并输出p指向结构体变量s1,则s1.成员名,(*p).成员名,p->成员名等价。本题采用自定义函数较为合适Author:emanleeDate:2008-05-12----------------......
  • C语言程序设计 练习题参考答案 第七章 (2) 指针与数组 main函数形参
    /*7.16实现测试字符串长度函数strlen()*/#include"stdio.h"intstrlen(char*p);voidmain(){chars1[20]="s1s2s3s4";char*p=s1;printf("s1的长度:%d\n",strlen(s1));printf("s1的长度:%d\n",strlen(p));......
  • 数组和列表
    在编码领域,数组和列表就像保存多个数据的容器。这些可以是数字、文字或您想要保持井然有序的任何其他信息。数组:数组就像排列整齐的架子。每个项目都分配有一个唯一的位置,由索引(数字)标识。列表:列表更像是一排等待轮到的人。每个项目都按从第一个到最后一个的顺序排列。......
  • 如何遍历字符串数组元素的每一位.318
    code:intmaxProduct(char**words,intwordsSize){  inta[wordsSize];       //目标字符串转换成整型数组元素  intmaxlen=0;        //最大长度乘积  for(inti=0;i<wordsSize;++i){    //遍历字符串数......