数组的some和every方法,你用过吗?(含面试题)

103 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

昨天听pink老师的直播课,连麦模拟面试,老师问到了这样一个问题:购物车的全选和单选要怎么实现?

我先来按照个人理解回答一下这个问题:\

  1. 商品列表:list
  2. checkout:单选选中为true,未选中为false
  3. allChectout:全选中为true,否则为false
  • 点击全选的时候,下面的单选全部选中:首先要使用forEach遍历单选列表list,然后更改每个元素中checkout的值为true
  • 点击下面的单选,如果全部选中,上面的全选选中:选择一个单选,首先更改此元素的checkout的值为true,然后forEach遍历一次单选列表list,判断列表中每个元素的checkout值是否全部为true,如果全部为true,就修改allChectout的值为true

我想我的方法是可以实现的,但是下面弹幕包括老师提到了some和every,可是我没听说过,可能是我的基础太差了,今天就查了一下,才知道数组的方法还包括这两个函数。

some

数组中是不是至少有 1 个元素通过了被提供的函数测试,它返回true或false。只要有一个元素比对结果为true,返回结果就为true,反之要所有的元素比对结果为false才为false。

1.有一个符合对比结果

const arr = [
  {
    name: "phone",
    id: 1,
    price: 1034,
    checkout: false,
  },
  {
    name: "computer",
    id: 2,
    price: 6089,
    checkout: true,
  },
  {
    name: "headset",
    id: 3,
    price: 899,
    checkout: false,
  },
];

const flag = arr.some((item) => {
  return item.checkout === true;
});

console.log(flag, "----"); //true

2.没有符合对比结果

const arr = [
  {
    name: "phone",
    id: 1,
    price: 1034,
    checkout: false,
  },
  {
    name: "computer",
    id: 2,
    price: 6089,
    checkout: false,
  },
  {
    name: "headset",
    id: 3,
    price: 899,
    checkout: false,
  },
];

const flag = arr.some((item) => {
  return item.checkout === true;
});

console.log(flag, "----"); //false

若传入一个空数组,every会返回 false

every

测试一个数组内的所有元素是否都能通过某个指定函数的测试,它返回true或false。只要有一个元素比对结果为false则返回false,反之要所有的元素比对结果为true才为true。

1.有一个符合结果

const arr = [
  {
    name: "phone",
    id: 1,
    price: 1034,
    checkout: false,
  },
  {
    name: "computer",
    id: 2,
    price: 6089,
    checkout: true,
  },
  {
    name: "headset",
    id: 3,
    price: 899,
    checkout: false,
  },
];

const flag = arr.every((item) => {
  return item.checkout === true;
});

console.log(flag, "----");  //false

2.全部符合结果

const arr = [
  {
    name: "phone",
    id: 1,
    price: 1034,
    checkout: true,
  },
  {
    name: "computer",
    id: 2,
    price: 6089,
    checkout: true,
  },
  {
    name: "headset",
    id: 3,
    price: 899,
    checkout: true,
  },
];

const flag = arr.every((item) => {
  return item.checkout === true;
});

console.log(flag, "----");

若传入一个空数组,every会返回 true

some 一旦找到一个符合条件的值,就会终止循环。
every 从迭代开始,一旦找到一个不符合条件,就会终止循环。