数组方法

53 阅读2分钟

数组

添加元素

在数组末尾插入元素

  1. 把值赋值给最后一个空位上的元素
let nums = [1,2,3];
nums[nums.length] = 4;
console.log('nums', nums)
  1. 使用push
let nums = [1,2,3];
nums.push(1,2,3)

在js中,数组是一个可以修改的对象。如果添加元素,就会动态增长。在c和java等其他语言中,想添加元素就要创建一个全新的数组,不能简单的添加所需元素

在数组开头插入元素

首选要腾出数组中第一个元素的位置,把所有元素位置向右移动一位,然后循环,将对应的前一个元素(i-1)赋值给(i),最后把我们想要的值赋值给第一个位置

Array.prototype.insertFirstPosition = function (value) {
  for (let k = this.length; k > 0; k--) {
    this[k] = this[k - 1];
  }
  this[0] = value;
};
let nums = [1, 2, 3];
nums.insertFirstPosition(-2);
console.log('nums', nums); // [ -2, 1, 2, 3 ]

使用unshift

let nums = [1, 2, 3];
nums.unshift(-2);
console.log('nums', nums); //  [ -2, 1, 2, 3 ]

删除元素

从数组末尾删除元素

  1. 利用length属性
let nums = [1, 2, 3];
nums.length = nums.length - 1;
console.log('nums', nums); //  [ 1, 2 ]
  1. 利用pop
let nums = [1, 2, 3];
nums.pop();
console.log('nums', nums); //  [ 1, 2 ]
  1. 利用splice
let nums = [1, 2, 3];
nums.splice(-1, 1);
console.log('nums', nums); //  [ 1, 2 ]

从数组开头删除元素

  1. 将数组所有元素左移一位
let nums = [1, 2, 3];

Array.prototype.removeFirstPosition = function () {
  for (let k = 0; k < this.length; k++) {
    this[k] = this[k + 1];
  }
};

nums.removeFirstPosition();
console.log('nums', nums); //  [ 2, 3, undefined ]

会出现一个问题,元素左移,只是把元素的第一位的值,用第二位覆盖了,并没有将第一个元素删除。导致,最后一位会出现undefined ,并且长度没有发生变化,那么需要实现一个真正删除元素的方法

真正移除这个元素,我们要创建一个新的元素,将所有不是undefined的值,从原来的数组,复制到新的数组中

let nums = [1, 2, 3];
Array.prototype.reIndex = function () {
  const newArray = [];
  for (let k = 0; k < this.length; k++) {
    if (this[k] !== undefined) {
      newArray.push(this[k]);
    }
  }
  return newArray;
};

Array.prototype.removeFirstPosition = function () {
  for (let k = 0; k < this.length; k++) {
    this[k] = this[k + 1];
  }
  return this.reIndex(this);
};

const remove = nums.removeFirstPosition();
console.log('remove', remove); //  [ 2, 3 ]

去掉undefined 也可以使用filter简化

Array.prototype.reIndex = function () {
  return this.filter((v) => v);
};

  1. 使用shift
let nums = [1, 2, 3];
nums.shift();
console.log('nums', nums); //  [ 2, 3 ]

在任意位置添加或者删除元素

splice

  • 第一个参数表示要删除或插入的元素的索引值
  • 第二个参数是删除元素的个数
  • 第三个参数往后,就是要添加到数组的元素

数组合并

  1. concat
let zero = 0;
let arr1 = [1, 2];
let arr2 = [2, 3, 4, 5];
let num = arr2.concat(zero, arr1);
console.log('num', num);

搜索相关

 let arr = [
    {
      name: '张三',
      score: 40,
    },
    {
      name: '李四',
      score: 60,
    },
    {
      name: '张三0',
      score: 70,
    },
    {
      name: '张三1',
      score: 90,
    },
    {
      name: '张三2',
      score: 100,
    },
    {
      name: '张三3',
      score: 100,
    },
  ];
  // 1. 全班同学是不是都及格了
  let jige = arr.every((v) => v.score >= 60);
  console.log('jige', jige);
  // 2. 全班同学的及格率
  let jigecount = arr.filter((v) => v.score >= 60);
  console.log('jigecount', jigecount.length / arr.length);
  // 3. 没有及格的同学的名字都有哪些
  let meijige = arr.filter((v) => v.score < 60).map((n) => n.name);
  console.log('meijige', meijige);
  // 4. 有没有满分的同学
  let manfen = arr.some((v) => v.score == 100);
  console.log('manfen', manfen);
  // 5. 有满分的话,这个同学叫什么
  let manName = arr.find((v) => v.score === 100).name;
  console.log('manName', manName);
  //   let manName = arr.filter((v) => v.score === 100).map((n) => n.name);
  //   console.log('manName', manName);
  // 6. 找到李四的分数
  let li = arr.find((v) => v.name == '李四').score;
  console.log('li', li);
// 7. 想给每一项增加一个check属性
  let ch = arr.map((item) => {
    item.check = false;
    return item;
  });
  console.log('ch', ch);

给数组每一项添加一个字段

taskList = list.map((item) => {
      return {
              ...item,
              isEding: false,
      };
  });

根据特定的字符截取数据

let pimg = 'https://mer-media1.52ritao.cn/item/detail/orig/photos/m20648829566_1.jpg?1675644078?size=100*100&from="other"'
pimg.indexOf('?') > 0 ? pimg.substr(0,pimg.indexOf('?')) : pimg

image.png

过滤出没有某个字段的数据

const filterNoRefusedData = () => {
   return packageTips.value.filter(
   	(item) => !item.hasOwnProperty('partRefundAmount')
   );
};