Array对象方法(八) slice/splice/some/sort/reverse

224 阅读2分钟

javaScript Array数组对象slice/splice/some/sort/reverse

slice:切割出数组的一部分并返回,不会修改原数组

注意事项:

  • 传入一个参数的时候,会从开始的地方一直到数组尾部。
  • 负数表示倒数
let arr = [5, 6, 7, 8, 1, 2, 3];
console.log(arr.slice(0, 3)); // [5, 6, 7]
console.log(arr.slice(1, 4)); // [6, 7, 8]
console.log(arr.slice(-1)); // [3]
console.log(arr.slice(-3, -1)); // [1, 2]
console.log(arr.slice(-2)); // [2, 3]
let arr1 = [
  { name: 'zg', age: 18 },
  { name: 'kobe', age: 35 },
  { name: 'lucy', age: 22 },
];
console.log(arr1.slice(3, 5)); // []
console.log(arr1.slice(0)); 
/**结果
  {name: 'zg', age: 18}
  {name: 'kobe', age: 35}
  {name: 'lucy', age: 22}
*/ 

splice:删除或修改指定位置的元素,会修改原数组

  • 参数1:表示指定开始位置
  • 参数2:表示要剔除掉几个数值
  • 参数3:将删除的数值替换成对应的数值
let arr = [5, 6, 7, 8, 1, 2, 3];
arr.splice(0, 1, 777);
console.log([...arr]); // [777, 6, 7, 8, 1, 2, 3]
arr.splice(0, 2, 456, 456, 456, 456);
// 指定位置修改,多出的部分会直接增加上去
console.log([...arr]); // [456, 456, 456, 456, 7, 8, 1, 2, 3]
let months = ['Jan', 'March', 'April', 'June'];
// 从0开始,删掉一个
months.splice(0, 1);
console.log([...months]); // ['March', 'April', 'June']
months.splice(0, 2);
console.log([...months]); // ['June']
let arr1 = [
  { name: 'zg', age: 18 },
  { name: 'kobe', age: 35 },
  { name: 'lucy', age: 22 },
];
arr1.splice(1, 2);
console.log([...arr1]);
/**结果
  {name: 'zg', age: 18}
*/

some:用于判断数组中是否有1个或1个以上符合对应的条件,条件为传入的函数的对应逻辑

let arr = [5, 6, 7, 8, 1, 2, 3];
let result = arr.some(item => {
  return item > 5;
});
console.log(result); // true
result = arr.some(item => {
  return item < 0;
});
console.log(result); // false

sort:排序。会改变数组内部

  • 默认升序
  • 根据传入的参数逻辑进行排序,当return的值大于0时,就会交换两个数值内容

正常用法

let arr = [5, 6, 7, 8, 1, 2, 3];
arr.sort();
console.log(arr); // [1, 2, 3, 5, 6, 7, 8]

let strArr = ["zg", "aa", "cs", "lucy"];
strArr.sort();
console.log(strArr); // ['aa', 'cs', 'lucy', 'zg']

涉及到对象内容的排序。可以依次根据数组中对象内容不同进行排序,下面例子依次按照:名称、年龄、身份代码进行排序

let objArr = [
  { name: 'kobe', age: 36, identifyCode: 100004 },
  { name: 'kobe', age: 36, identifyCode: 100003 },
  { name: 'kobe', age: 35, identifyCode: 100002 },
  { name: 'zg', age: 18, identifyCode: 100001 },
];
objArr.sort((a, b) => {
  if(a.name != b.name) {
    return a.name - b.name; // 名称字符大小排序
  } else if(a.age != b.age) {
    return a.age - b.age; // 年龄大小排序
  } else {
    return a.identifyCode - b.identifyCode; // 身份代码大小排序
  }
});
console.log(objArr);
/**结果
  {name: 'kobe', age: 35, identifyCode: 100002}
  {name: 'kobe', age: 36, identifyCode: 100003}
  {name: 'kobe', age: 36, identifyCode: 100004}
  {name: 'zg', age: 18, identifyCode: 100001}
*/

reverse:将数组逆序。会改变数组内部

let arr = [1, 2, 3, 4, 5, 6, 7];
arr.reverse();
console.log(arr); // [7, 6, 5, 4, 3, 2, 1]