一次性搞懂find、some、every、map、findIndex、filter、reduce

205 阅读3分钟

一、find()

  • 作用: 寻找数组中有没有符合条件的元素
  • 影响: 不会改变原数组
  • 返回值: 只要找到一个就返回这个元素,没找到就返回 undefined
const goodsList = [
    { id: 101, price: 2000 },
    { id: 102, price: 1000 },
    { id: 103, price: 899 },
    { id: 104, price: 999 },
    { id: 105, price: 5000 },
]
// ◆买一件价格超过1000元的衣服
// const res1=goodsList.find(item=>{return item.price>1000})
const res1 = goodsList.find(item => item.price > 1000)
console.log(res1)// { id: 101, price: 2000 }

二、some()

  • 作用: 确认数组中有没有符合条件的元素
  • 影响: 不会改变原数组
  • 返回值: 只要找到一个就返回 true,没找到就返回 false
const goodsList = [
    { id: 101, price: 2000 },
    { id: 102, price: 1000 },
    { id: 103, price: 899 },
    { id: 104, price: 999 },
    { id: 105, price: 5000 },
]
// ◆这家店有没有价格超过1000元的衣服
const res2 = goodsList.some(item => item.price > 1000)
console.log(res2)// true

三、every()

  • 作用: 确认数组中是否所有的元素都符合要求
  • 影响: 不会改变原数组
  • 返回值: 只要有一个不符合就返回 false ,否则返回 true
const goodsList = [
    { id: 101, price: 2000 },
    { id: 102, price: 1000 },
    { id: 103, price: 899 },
    { id: 104, price: 999 },
    { id: 105, price: 5000 },
]
// ◆这家店所有的衣服都超过1000元吗
const res3 = goodsList.every(item => item.price > 1000)
console.log(res3)// false

四、map()

  • 作用: 映射数组中的元素
  • 影响: 不会改变原数组
  • 返回值: 返回映射后的新数组
const goodsList = [
    { id: 101, price: 2000 },
    { id: 102, price: 1000 },
    { id: 103, price: 899 },
    { id: 104, price: 999 },
    { id: 105, price: 5000 },
]
// ◆把这家店所有的衣服都买了,打9折
const res4 = goodsList.map(item => item.price * 0.9)
console.log(res4)//[ 1800, 900, 809.1, 899.1, 4500 ]

// ◆把这家店所有的衣服都买了,打9折
const res5 = goodsList.map(({ id, price }) => { return { id, price: price * 0.9 } })
console.log(res5)
// [
//     { id: 101, price: 1800 },
//     { id: 102, price: 900 },
//     { id: 103, price: 809.1 },
//     { id: 104, price: 899.1 },
//     { id: 105, price: 4500 }
//   ]

// ◆补充:返回布尔值的数值
const res6 = goodsList.map((item) => item.price > 10000)
console.log(res6)// [ false, false, false, false, false ]

const res7 = goodsList.map((item) => item.price > 999)
console.log(res7)// [ true, true, false, false, true ]

// ◆补充:返回 undefined 的情况
const res8 = goodsList.map((item) => {
    if (item.price > 999) {
        return item
    }
})
console.log(res8)
// [
//     { id: 101, price: 2000 },
//     { id: 102, price: 1000 },
//     undefined,
//     undefined,
//     { id: 105, price: 5000 }
//   ]

五、findIndex()

  • 作用: 根据条件寻找元素的索引 index
  • 影响: 不会改变原数组
  • 返回值: 返回该元素的索引
const goodsList = [
    { id: 101, price: 2000 },
    { id: 102, price: 1000 },
    { id: 103, price: 899 },
    { id: 104, price: 999 },
    { id: 105, price: 5000 },
]
// ◆我要买 id 为 104 的那件衣服,去几号仓库拿
const res9 = goodsList.findIndex(item => item.id === 104)
console.log(res9)//3

六、filter()

  • 作用: 过滤符合条件的元素
  • 影响: 不会改变原数组
  • 返回值: 返回一个过滤后的数组
const goodsList = [
    { id: 101, price: 2000 },
    { id: 102, price: 1000 },
    { id: 103, price: 899 },
    { id: 104, price: 999 },
    { id: 105, price: 5000 },
]
// ◆价格低于1000元的衣服有哪些
const res10 = goodsList.filter(item => item.price < 1000)
console.log(res10)//[ { id: 103, price: 899 }, { id: 104, price: 999 } ]

七、reduce()

  • 参数1:上一次回调的返回值,默认是第一个元素
  • 参数2:当前元素值
  • 参数3:当前下标
  • 场景:数组求和、最值、去重等
  • 影响: 不会改变原数组
  • 返回值: 返回求和或最值的结果
const goodsList = [
    { id: 101, price: 2000 },
    { id: 102, price: 1000 },
    { id: 103, price: 899 },
    { id: 104, price: 999 },
    { id: 105, price: 5000 },
]
// ◆计算所有衣服的总和
// 法1
const res11 = goodsList.reduce((sum, item) => { return item.price + sum }, 0)
// 法2
const res12 = goodsList.reduce((sum, item) => item.price + sum, 0)
// 法3
const res13 = goodsList.reduce((sum, item) => sum += item.price, 0)
console.log(res11, res12, res13)// 9898 9898 9898

// ◆找出最贵的那一件衣服
const res14 = goodsList.reduce((sum, item) => sum > item ? sum : item, 0)
console.log(res14)// { id: 105, price: 5000 }