本文已参与「新人创作礼」活动,一起开启掘金创作之路。
昨天听pink老师的直播课,连麦模拟面试,老师问到了这样一个问题:购物车的全选和单选要怎么实现?
我先来按照个人理解回答一下这个问题:\
- 商品列表:list
- checkout:单选选中为true,未选中为false
- 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 从迭代开始,一旦找到一个不符合条件,就会终止循环。