导航


HTML

CSS

JavaScript

浏览器 & 网络

版本管理

框架

构建工具

TypeScript

性能优化

软实力

算法

UI、组件库

Node

冷门技能

concat 合并两个或多个数组

var arr1 = ['a', 'b', 'c'];
var arr2 = [1, 2, 3];
var arr3 = arr1.concat(arr2);
console.log({
	arr1, arr2, arr3
});

Untitled

const arr = [1].concat([1,2,[2,3]])
console.log(arr); // [ 1, 1, 2, [ 2, 3 ] ]

ES6 扩展运算符 ... 合并数组

let a = [1, 2, 3]
let b = [0, ...a, 4, 5]
console.log(a, b); //  [ 1, 2, 3 ] [ 0, 1, 2, 3, 4, 5 ]

⭐️ slice 浅拷贝数组的元素

var arr = [
  'Lance',
  {
    a: {
      b: {
        c: 3
      }
    }
  }
]
var arr2 = arr.slice()
arr2[1].a.b = 3
console.log(arr, arr2) // [ 'Lance', { a: { b: 3 } } ] [ 'Lance', { a: { b: 3 } } ]

begin 参数

如果传负数 ,表示从原数组中的倒数第几个元素开始提取

var arr = ['l', 'a', 'n', 'c', 'e'];
var arr1 = arr.slice(-3, -1);
console.log(arr1);

Untitled

var arr = ['l', 'a', 'n', 'c', 'e'];
var arr1 = arr.slice(-3, 1);
console.log(arr1);

Untitled

如果省略,从索引 0 开始。

var arr = ['l', 'a', 'n', 'c', 'e'];
var arr1 = arr.slice();
console.log(arr1);

Untitled

⭐️ 如果超出原数组的索引范围,则会返回空数组。

var arr = ['l', 'a', 'n', 'c', 'e'];
var arr1 = arr.slice(10);
console.log(arr1); // []

Untitled

⭐️ end 参数

提取终止处的索引(从 0 开始),在该索引处结束提取原数组元素。slice 会提取原数组中索引从 begin 到 end 的所有元素(包含 begin,但不包含 end)。

正数

slice(1, 4) 会提取原数组中从第二个元素开始一直到第四个元素的所有元素 (索引为 1, 2, 3的元素)。

var arr = ['l', 'a', 'n', 'c', 'e'];
var arr1 = arr.slice(1, 4);
console.log(arr1);

Untitled

⭐️ 负数

如果该参数为负数, 则它表示在原数组中的倒数第几个元素结束抽取。 slice(-2,-1) 表示抽取了原数组中的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素)。

var arr = ['l', 'a', 'n', 'c', 'e'];
var arr1 = arr.slice(1, -2);
console.log(arr1);

Untitled

省略不传 or 大于数组的长度

如果 end 被省略,或者 end 大于数组的长度,则 slice 会一直提取到原数组末尾。

var arr = ['l', 'a', 'n', 'c', 'e'];
var arr1 = arr.slice(3, 10);
console.log(arr1); // ['c', 'e']

Untitled

⭐️ join 数组转字符串

⭐️ Array.prototype.join

const arr = ['1', '2', '3'];
console.log(arr.join()); // 1,2,3        不传参,默认 ',' 连接
console.log(arr.join('')); // 123
console.log(arr.join(',')); // 1,2,3
var arr = ['a', 'b', 'c', 'd', 'e'];
var str1 = arr.join();
console.log(str1);
var str2 = arr.join('');
console.log(str2);
var str3 = arr.join('-');
console.log(str3);

Untitled

let arr = [
  ['Lance', 'GC'],
  'Jerry'
]
console.log(arr.join());
console.log(arr[0].join());
console.log(arr.join(''));
console.log(arr[0].join(''));
console.log(arr.join('-'));
console.log(arr[0].join('-'));

// 解析
// arr.join() ->
// 第一个元素还是数组,且里边都是基本类型,则对整个数组 toString => 
// ['Lance', 'GC'].toString() => 变成 'Lance,GC' 字符串,再把它和后边 Jerry join =>
// ['Lance,GC', 'Jerry'].join() => 默认逗号隔开 => 'Lance,GC,Jerry'

// arr[0].join() ->
// ['Lance', 'GC'].join() 相当于 ['Lance', 'GC'].join(',')
// 即把数组中两个成员拿出来,用逗号拼接 => 'Lance,GC'

// arr.join('') ->
// 对数组成员用 '' 空字符串拼接,发现第一个成员是个只包含基本类型数据的数组,需要先 toString 一下
// ['Lance', 'GC'].toString() => 'Lance,GC'
// 然后再把 'Lance,GC' 和 'Jerry' join('')一下,就变成了 'Lance,GCJerry'

// arr[0].join('') ->
// ['Lance', 'GC'].join('') => 'LanceGC'

// arr.join('-') ->
// 先对 ['Lance', 'GC'] 执行 toString 变成 'Lance,GC' =>
// 再把 'Lance,GC' 和 'Jerry' 用 '-' 拼接下,变成 'Lance,GC-Jerry'

// arr[0].join('-') ->
// ['Lance', 'GC'].join('-') 变成 'Lance-GC'
let arr = [
  { name: 'Lance', age: 27 },
  'Jerry'
]

console.log(arr.join('-'));
// [object Object]-Jerry

⭐️ String.prototype.split(separator, limit)

split :将字符串按照指定的标识符切割成数组。

var arr = ['a', 'b', 'c', 'd', 'e'];
var str1 = arr.join();
console.log(str1, str1.split(','));
var str2 = arr.join('');
console.log(str2, str2.split(''));
var str3 = arr.join('-');
console.log(str3, str3.split('-', 3));

Untitled

var str = '123123'
console.log(str.split(''));
console.log(str.split(','));
console.log(str.split('-'));

Untitled

indexOf() 查找数组是否存在某个元素,返回下标

let a=['啦啦', 2, 4, 24, NaN];
console.log(a.indexOf('啦'));  // -1 
console.log(a.indexOf('NaN'));  // -1 
console.log(a.indexOf('啦啦')); // 0
let arr = ['Lance'];
console.log(arr.indexOf()); // -1
console.log(arr.indexOf(undefined)); // -1

let arr2 = ['Lance', undefined];
console.log(arr.indexOf()); // 1
console.log(arr.indexOf(undefined)); // 1

lastIndexOf() 查找指定元素在数组中的最后一个位置