数组的扩展

1:扩展运算符

主要作用就是展开当前数组;一般应用于浅拷贝、合并数组、解构

  console.log(1, ...[2, 3, 4], 5);
  // 1  2  3  4  5
  
  ...[2, 3, 4]
  // VM71: 1 Uncaught SyntaxError: Unexpected token...
  
  [...[2, 3, 4]]
  // (3)[2, 3, 4]
  • 浅拷贝
        const arr1 = [1,2];
        const arr2 = [...arr1];
        // arr2 --> [1,2]
    
    
        // 情况二
        const arry1 = [3, 4];
        const arry2 = [...arry1, ...arry1];
        // arry2 --> [3,4,3,4]
    
  • 合并数组
        const arr1 = [1, 2];
        const arr2 = [2, 2];
        const arr3 = [3, 2];
        [...arr1, ...arr2, ...arr3];
        // (6)[1, 2, 2, 2, 3, 2]
    
  • 解构
        const [first, ...rest] = [1, 2, 3, 4, 5];
        // first --> 1
        // rest --> [2, 3, 4, 5] 
    
  • 拆分字符串
        [...'hello']
        // [ "h", "e", "l", "l", "o" ]
    
  • 转换Iterator接口的对象
        [...'abcabcabc'.matchAll('ab')]; //matchAll返回一个迭代器
        // [Array(1), Array(1), Array(1)]
    
    
        let nodeList = document.querySelectorAll('div');
        let array = [...nodeList];
        // [Array(1), Array(1), Array(1)]
    

2:Array.from,从类数组(包含length)的对象和迭代器对象转换为数组

用法1

    let arrayLike = {
    '0': 'a',
    '1': 'b',
    '2': 'c',
    length: 3
    };
    
    Array.from(arrayLike);
    // ['a', 'b', 'c'] 
    // 如果去掉 '0': 'a',这一行,那么也是会返回一个数组只是去掉的位置换成了undefined。

用法2 querySelectorAll

    Array.from([...'abcabcabc'.matchAll('ab')]);
    // [Array(1), Array(1), Array(1)]
    
    Array.from([1, 2, 3]);
    // [1, 2, 3] 
    
    Array.from({length: 3});
    // [ undefined, undefined, undefined ] 
    
    
    Array.from({
      length: 100
    }).fill(0);
    
    // (100) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]    fill代表返回的值
    
    
    // 接收函数
    Array.from([1, 2, 3], (x) => x * x);
    //  [1, 4, 9]

3:Array.of,将一组值, 转换为数组

    Array();
    // [] 
    
    Array(3);
    // [, , ,] 
    
    Array(3, 11, 8);
    // [3, 11, 8]
    
    Array.of();
    // [] 
    
    Array.of(undefined);
    // [undefined] 
    
    Array.of(1);
    // [1] 
    
    Array.of(1, 2);
    // [1, 2] 

4:copyWithin ,将指定位置的成员复制到其他位置

也就是说在当前数组里面它会把指定位置的元素或者数复制到其他地方,它会修改当前数组。它接收三个参数:

  • Array.prototype.copyWithin(target, start = 0, end = this.length);
  • target(必需): 从该位置开始替换数据(负值表示倒数),也就是说从哪里开始替换
  • start(可选):从该位置开始读取数据(默认为 0), 负值表示从末尾开始计算
  • end(可选):到该位置前停止读取数据(默认为数组长度), 负值表示从末尾开始计算 start - end 决定了一个范围,然后范围里面的成员复制到target里面开始
      [1, 2, 3, 4, 5].copyWithin(0, 3);
      // [4, 5, 3, 4, 5] 
    
      [1, 2, 3, 4, 5].copyWithin(0, 3, 4);
      // [4, 2, 3, 4, 5] 
    
    
      [1, 2, 3, 4, 5].copyWithin(0, -2, -1);
      // 等于:-2 + length = 3 ,-1 + length = 4 
      // [4, 2, 3, 4, 5] 
    

5:find,找出第一个符合条件的数组成员

  [1, -24, -5, 10].find((value, index, arr) => value < 0);
  //  -24

6:findIndex,找出第一个符合条件的数组成员位置下标

  [-11, 4, -5, 10].findIndex((value, index, arr) => value < 0);
  // 0

7:fill,使用给定值填充一个数组(处理模式和copywithin一样)

fill的第一个参数是填充的值,第二个参数和第三个参数类似于copywithin的start end。

  ['a', 'b', 'c'].fill(7);
  // [7, 7, 7] 
  
  new Array(3).fill(7);
  // [7, 7, 7]
  
  ['a', 'b', 'c'].fill(7, 1, 2);
  // ['a', 7, 'c']
  
  ['a', 'b', 'c'].fill(7, 1);
  // ['a', 7, 7]

8:entries、keys、values,遍历数组, 返回一个遍历器对象。

['a', 'b'].keys() 返回一个迭代器Array Iterator {},[...['a', 'b'].keys()]扩展一下返回一个数组[0,1]

  • keys:返回一个下标
        for (let index of ['a', 'b'].keys()) {
          console.log(index);
        }
        // 0 
        // 1 
    
  • values:返回字符本身值
        for (let elem of ['a', 'b'].values()) {
          console.log(elem);
        }
        // 'a' 
        // 'b' 
    
  • entries:返回既包含下标也包含值
        for (let [index, elem] of ['a', 'b'].entries()) {
          console.log(index, elem);
        }
        // 0 "a" 
        // 1 "b" 
    
        let letter = ['a', 'b', 'c'];
        let entries = letter.entries();
    
        // 依次遍历
        console.log(entries.next().value);
        // [0, 'a'] 
        console.log(entries.next().value);
        // [1, 'b']
        console.log(entries.next().value);
        // [2, 'c'] 
    

9:includes,某个数组是否包含给定的值,第二个参数表示起始位置。

  [1, 2, 3].includes(4);
  // false
  
  [1, 2, NaN].includes(NaN);
  // true 
  
  [1, 2, 3].includes(3, 3);
  // false 
  
  [1, 2, 3].includes(3, -1);   ?
  // true 

10:flat,数组降低维度

  [1, 2, [3, 4]].flat(); //[1, 2, [3, 4]]数组里面嵌套一个数组是一个二维数组,使用flat降低维度
  // [1, 2, 3, 4]
  
  [1, 2, [3, [4, 5]]].flat(2);
  // [1, 2, 3, 4, 5] 
  
  // 如果不知道维度,可以给一个无限大Infinity
  [1, [2, [3]]].flat(Infinity);
  // [1, 2, 3] 
  
  // 如果有一个空对象,flat会默认过滤处理掉空元素
  [1, 2, , 4, 5].flat();
  // [1, 2, 4, 5] 

11:flatMap,执行map函数再执行flat,也就是说把里面本身值先处理一遍输出然后再展开运算下一个值。

  [2, 3, 4].flatMap((x) => [x, x * 2]);
  
  // [2, 4, 3, 6, 4, 8] 

12:数组空位,ES6将空位转为undefined, ES5不同方法处理方式不一致。

  Array(3);
  // [, , ,] 或者 [empty × 3]
  
  Array.from(['a', , 'b']);
  // [ "a", undefined, "b" ] 
  
  [...['a', , 'b']];
  // [ "a", undefined, "b" ] 

转载于:https://my.oschina.net/u/4144971/blog/3085535

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在matlab中,数组的大小可以通过扩展来改变。数组扩展指的是扩展数组的大小以便能够存储更多的数据。数组扩展可以通过两种方式进行操作:一种是增加数组的行或列;另一种是增加数组的维度。 在matlab中,使用“[]”操作符可以创建数组。可以使用该操作符在现有的数组中添加新的行或列;例如,a = [a,b]将b添加为a的新列;a = [a;b]将b添加为a的新行。 要添加新维度,需要使用cat和reshape函数。用cat函数合并多个数组来形成更大的数组。例如,a = cat(3,b,c)将b和c合并成一个新的三维数组。用reshape函数可以将已有数组的布局重构为不同形状,以增加数组的维度。例如,a = reshape(a,[m,n,p,q])将a数组重构为一个四维数组。 需要注意的是,扩展数组可能需要重新分配内存,这将消耗更多的资源。因此,尽量减少数组扩展操作及扩展的大小,这样可以提高程序的效率和速度。 ### 回答2: 在MATLAB中,数组扩展是指在一个现有的数组基础上添加一个或多个元素,从而创建一个新的、具有更大尺寸的数组。这是一个非常常见的操作,尤其是对于需要在更大尺寸的数据集上进行处理和计算的科学家、工程师和分析师来说。 MATLAB提供了多种方法来扩展数组,包括: 1. 使用括号扩展语法: 通过在现有数组的末尾添加一个或多个元素,并将其包含在方括号中,可以扩展数组。例如,要将一个长度为3的向量 `[1,2,3]` 扩展到长度为4,可以使用以下语法: ` A = [1,2,3,4]` 2. 使用内置函数来创建新数组: MATLAB中内置的 `zeros`、`ones`、`eye`、`rand` 和 `randn` 函数可以用于创建初始值为0、1、单位矩阵、随机值和正态分布随机值的新数组。然后,可以使用括号扩展语法将新数组连接在一起以扩展现有数组。例如,要将一个长度为2的向量 `[1,2]` 扩展到长度为5,可以使用以下语法: `A = [1,2,zeros(1,3)]` 3. 使用内置函数 cat 或 horzcat/vetcath来连接数组: 可以使用内置的 `cat` 函数将不同的数组沿着不同的维度连接在一起,从而创建扩展数组。例如,要将两个2 x 2的矩阵水平连接起来以创建一个2 x 4的矩阵,可以使用以下语法: `A = cat(2, [1,1;2,2], [3,3;4,4])` 总之,在MATLAB中,通过使用括号扩展语法、内置的函数和工具箱中的其他函数,可以轻松地扩展数组。这可以节省编写代码的时间,同时使代码更加简洁和易于阅读。 ### 回答3: MATLAB是一款流行的数学软件,它提供了各种函数和工具箱,用于分析、处理和可视化数据。在MATLAB中,数组是数据的基本对象。当我们需要增加或减少数组的大小时,我们可以使用数组扩展来实现。 数组扩展是指在已有的数组中增加一些元素或者减少一些元素。在MATLAB中,我们可以使用点号和方括号来进行数组扩展。点号用于在末尾添加元素,方括号用于在任意位置添加或删除元素。 点号数组扩展可以使用以下语法: ```matlab A(end+1) = x ``` 其中,`A`是一个数组,`end`表示数组的最后一个元素,`x`是要添加的新元素。此语句将会在`A`的末尾添加一个新元素`x`。 除了`end`,我们还可以使用数字来指定添加位置: ```matlab A(n+1) = x ``` 这将会在`A`的第`n`个元素的后面添加新元素`x`。 方括号数组扩展可以使用以下语法: ```matlab A = [A(1:n-1), x, A(n:end)] ``` 其中,`A`是一个数组,`n`是要添加或删除的位置,`x`是要添加的新元素或删除的元素。 如果我们要在`A`的第`n`个位置添加新元素`x`,则我们可以使用以上语句将`A`分成两个部分: - 第一个部分是从`A`的第一个元素到第`n-1`个元素; - 第二个部分是从`A`的第`n`个元素到末尾。 然后,我们可以将新元素`x`插入到两个部分之间,从而扩展数组。 类似地,如果我们要删除`A`中的第`n`个元素,则可以使用如下代码: ```matlab A = [A(1:n-1), A(n+1:end)] ``` 这将会将`A`分成两个部分: - 第一个部分是从`A`的第一个元素到第`n-1`个元素; - 第二个部分是从`A`的第`n+1`个元素到末尾。 然后,我们可以将这两个部分合并成一个新的数组,从而缩小了`A`的大小。 总之,数组扩展是MATLAB中非常实用的功能,可以帮助我们快速增加或减少数组的大小,从而进行更高效的数据分析和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值