JavaScript 数组增加删除
JavaScript 数组增加删除
javaScript的数组本质是一个object,所有的key都是数字,value爱啥啥,所以非常灵活,也没有数组溢出这种事情,除非数组特别大,长度超过int的最大数值, key不够用了。
splice() vs. slice()
slice()
slice()用来取数组的一部分,并且返回一个新的数组,并不会对原来的数组有任何改动
可以接受一个或者两个参数·
slice(start)
从index为start
的位置截取后半截数组,包括start
位置的元素
slice(start, end)
从index为start
的位置截取到end
的数组,包括start
位置的元素,但是不包括位置为end
的元素
const letters = ['a', 'b', 'c', 'd', 'e'];
const newLetters = letters.slice(2);
console.log(newLetters); // ['c', 'd', 'e']
console.log(letters); //['a', 'b', 'c', 'd', 'e']
//slice并不会改变原来的数组
console.log(letters.slice(2, 4)); // ['c', 'd']
//index为2的元素包含了, 但是不包含index为4的元素
console.log(letters.slice(2, 5)) // ['c', 'd', 'e']
console.log(letters.slice(2, 6)) // ['c', 'd', 'e']
//letters最大index为4,所以当后面一个参数超出数组范围的时候将截取到最后一个元素
console.log(letters.slice(-2));//['d', 'e']
//从倒数第二个开始选,并且包括倒数第二个(第一个参数)
console.log(letters.slice(-4, -2));//['b', 'c']
//从倒数第四个开始选,并且包括倒数第四个(第一个参数),选到倒数第二个,并不包含倒数第二个(第二个参数)
console.log(letters.slice(0, -2));//['a', 'b', 'c']
//从index为0开始选,并且包括letters[0](第一个参数),选到倒数第二个,并不包含倒数第二个(第二个参数)
console.log(letters); //['a', 'b', 'c', 'd', 'e']
//letters并没有改变,打印的都是截取出来的新数组
splice()
splice() 对数组进行截取/删除/替换/添加
, 并且在原来数组上进行操作,返回的为被从原来数组里被删除的元素。
可以接受N个参数,其中,第一个参数为要修改的位置, 第二个参数为要删除的个数,第三个以上的参数为要添加的元素。
splice(postion)
当只有一个参数的时候,也是截取一部分数组, 具体看下面例子
const letters = ['a', 'b', 'c', 'd', 'e'];
const newLetters = letters.splice(2);
console.log(newLetters); // ['c', 'd', 'e']
console.log(letters); //['a', 'b']
//当只有一个参数的时候,返回值和slice是一样的,但是splice会把原来的数组从index为2之后的切掉
console.log(letters.splice(-1)); //['b']
console.log(letters); //['a']
//当一个参数为负数的时候,也和slice类似,返回值和slice是一样的,数组本身是另外一部分
splice(postion, deleteCount)
, 从position
开始,删除deleteCount
个元素(包括position
那个元素)
splice(postion , deleteCount, item1, item2, itemN)
, 从position
开始,删除deleteCount
个元素, 再添加上item1, item2, itemN
这几个元素
常用用法, 一般用来对数组进行操作
const letters = ['a', 'b', 'c', 'd', 'e'];
letters.splice(2, 1);
console.log(letters); //['a', 'b', 'd', 'e']
// 删除从index为2开始算,一个元素
letters.splice(1, 2);
console.log(letters);//['a', 'e']
// 删除从index为1开始算,两个元素
letters.splice(1, 1, 'f');
console.log(letters);//['a', 'f']
//从位置1开始,删除1个元素,再添加一个'f'
letters.splice(1, 1, 'g', 'h', 'i');
console.log(letters);//['a', 'g', 'h', 'i']
//同上
letters.splice(2, 0, 'j', 'k');
console.log(letters);//['a', 'g', 'j', 'k', 'h', 'i']
//如果不删除的话,则将要添加的元素从index为2开始添加。原来的index为2 的‘h’被往后顺延。
注意,splice是有返回值的,返回的是被删除的元素:
const letters = ['a', 'b', 'c', 'd', 'e'];
console.log(letters.splice(2, 1)); //['c']
// 此时letters为['a', 'b', 'd', 'e']
console.log(letters.splice(1, 2)); //['b', 'd']
//此时letters为['a', 'e']
console.log(letters.splice(1, 1, 'f')); //['e']
//此时letters为['a', 'f']
console.log(letters.splice(1, 0, 'j', 'k')); //[]
//因为没有删除任何元素,所以是空array
//如果不删除的话,则将要添加的元素从index为2开始添加。原来的index为2 的‘h’被往后顺延。