ES6之Array.from()方法

Array.from()方法就是将一个类数组对象或者部署了Iterator接口的对象(Set、Map、Array)转换成一个真正的数组。
那么什么是类数组对象呢?所谓类数组对象,最基本的要求就是具有length属性的对象。

基本用法

var arrayLike = {
    0: '张三',
    1: 18,
    2: ['lei','hai','yuan'],
    3: '上海市',
    length: 4
}
const arr = Array.from(arrayLike)
console.log(arr)    // ["张三", 18, Array(3), "上海市"]

注意:
        一定要有length属性
        length属性的长度是除了本属性其它属性的个数。
        类数组的key是数字

下面看下如果不是真正的类数组会出现什么情况

// 1、 将length属性去掉,会返回空数组[]
var arrayLike = {
    0: '张三',
    1: 18,
    2: ['lei','hai','yuan'],
    3: '上海市',
}
const arr = Array.from(arrayLike)
console.log(arr)    // []

// 2、key不为数字
var arrayLike = {
    'a': '张三',
    'b': 18,
    'c': ['lei','hai','yuan'],
    'd': '上海市',
    length: 4
}
const arr = Array.from(arrayLike)
console.log(arr)    // [undefined, undefined, undefined, undefined]

// 3、数字key不从0开始
var arrayLike = {
    1: '张三',
    3: 18,
    2: ['lei','hai','yuan'],
    4: '上海市',
    length: 4
}
const arr = Array.from(arrayLike)
console.log(arr)    // [undefined, "张三", Array(3), 18]

可以看到length=4就代表arr[0]、arr[1]、arr[2]、arr[3] 这个数字就是类数组对象的key。

Array.from还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组

var arrayLike = {
    0: 2,
    1: 4,
    2: 6,
    length:3
}
console.log(Array.from(arrayLike, x => x * x))  // [4, 16, 36]
// 等同于
console.log(Array.from(arrayLike).map(x => x*x))

应用场景

1、字符串转数组

var s = "dkandedg"
var arr = Array.from(s)
console.log(arr)    // ["d", "k", "a", "n", "d", "e", "d", "g"]

2、数组去重

function dupRem(arr) {
    return Array.from(new Set(arr))
}
console.log(dupRem([3,5,3,2,6,5,3]))    // [3, 5, 2, 6]

3、arguments转对象

// 求最大值 
function max() {
    return Math.max.apply(null,Array.from(arguments))
}
console.log(max(16,28,23))  // 28

// 求和
function sum() {
    return Array.from(arguments).reduce((sum,key) => sum+key)
}
console.log(sum(1,2,3))    // 6

4、set转数组

var arr = [2,3,6,8]
var set = new Set(arr)
console.log(Array.from(set))    // [2, 3, 6, 8]

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ES6中,Array.from()和Array.of()都是用于创建新数组的方法,但它们的功能和使用方式有所不同。 1. Array.from(): - Array.from()方法用于从类数组对象或可迭代对象中创建一个新的数组实例。 - 它接受一个类数组对象或可迭代对象作为第一个参数,并可选地接受一个映射函数和一个上下文对象作为第二个和第三个参数。 - 它将类数组对象或可迭代对象中的每个元素转换为数组的对应元素。 - 映射函数可以在转换过程中对每个元素进行处理。 - 返回一个新的数组实例。 示例: ```javascript // 从字符串中创建数组 const str = 'hello'; const arr = Array.from(str); console.log(arr); // ['h', 'e', 'l', 'l', 'o'] // 从集合中创建数组 const set = new Set([1, 2, 3]); const arr2 = Array.from(set, num => num * 2); console.log(arr2); // [2, 4, 6] ``` 2. Array.of(): - Array.of()方法用于创建一个包含任意数量参数的新数组实例。 - 它接受任意数量的参数,并将这些参数作为数组的元素,返回一个新的数组实例。 - 它解决了使用Array构造函数创建单个元素数组时的一些问题。 示例: ```javascript const arr1 = Array.of(1, 2, 3, 4); console.log(arr1); // [1, 2, 3, 4] const arr2 = Array.of(5); console.log(arr2); // [5] const arr3 = Array.of(undefined); console.log(arr3); // [undefined] ``` 总结: - Array.from()方法用于从类数组对象或可迭代对象中创建一个新数组,并提供映射功能。 - Array.of()方法用于创建一个包含任意数量参数的新数组实例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值