Array.from摘录

219 阅读1分钟

前情提要,在学习柯里化的过程中看到了from方法,特学习了一下。摘录了一下常用的笔记。内容引申自 segmentfault.com/a/119000002…

1、转化arguments (将类数组转换成数组)

function sumArguments() {
    return Array.from(arguments).reduce((sum, num) => sum + num);
}

sumArguments(1, 2, 3); // => 6

2、克隆数组

const numbers = [3, 6, 9];
const numbersCopy = Array.from(numbers);
// Array.from(numbers) 创建了对 numbers 数组的浅拷贝,
// numbers === numbersCopy 的结果是 false,
// 意味着虽然 numbers 和 numbersCopy 有着相同的项,但是它们是不同的数组对象。
numbers === numbersCopy; // => false

!!!深拷贝

function recursiveClone(val) {
    return Array.isArray(val) ? Array.from(val, recursiveClone) : val;
}

const numbers = [[0, 1, 2], ['one', 'two', 'three']];
const numbersClone = recursiveClone(numbers);

numbersClone; // => [[0, 1, 2], ['one', 'two', 'three']]
numbers[0] === numbersClone[0] // => false

3、生成数字氛围

function range(end) {
    return Array.from({ length: end }, (_, index) => index);
}

range(4); // => [0, 1, 2, 3]

4、数组去重

function unique(array) {
  return Array.from(new Set(array));
}

unique([1, 1, 2, 3, 3]); // => [1, 2, 3]

由此可见,要将一个类数组对象转换为一个真正的数组,必须具备以下条件:

1、该类数组对象必须具有length属性,用于指定数组的长度。如果没有length属性,那么转换后的数组是一个空数组。

2、该类数组对象的属性名必须为数值型或字符串型的数字

ps: 该类数组对象的属性名可以加引号,也可以不加引号