前端开发中有哪些常用的数组操作方法?

javascript数组

图片

简介

JavaScript 数组用于在单一变量中存储多个值。

JavaScript数组是无类型的,数组元素可以是任意类型,并且同一个数组中元素类型也可以不同。

实例

var cars = ["Saab", "Volvo", "BMW"];

什么是数组?

数组是一种特殊的变量,它能够一次存放一个以上的值。

如果您有一个项目清单(例如,汽车品牌列表),在单个变量中存储汽车品牌应该是这样的:

var car1 = "Saab";
var car2 = "Volvo";
var car3 = "BMW"; 

不过,假如您希望遍历所有汽车并找到一个特定的值?假如不是三个汽车品牌而是三百个呢?

解决方法就是数组!

数组可以用一个单一的名称存放很多值,并且还可以通过引用索引号来访问这些值。

数组常用方法

  • • 一、操作方法

    • • indexOf()

    • • includes()

    • • find()

    • • splice()

    • • pop()

    • • shift()

    • • splice()

    • • slice()

    • • push()

    • • unshift()

    • • splice

    • • concat()

    • • 

    • • 

    • • 

    • • 

  • • 二、排序方法

    • • reverse()

    • • sort()

  • • 三、转换方法

    • • join()

  • • 四、迭代方法

    • • some()

    • • every()

    • • forEach()

    • • filter()

    • • map()

更多详细内容,请查看 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array

React中常用数组方法

在react中,或者说在前端对于数组的操作中,常用的几个比较复杂的数组操作方法基本有如下几类:

  • • 遍历

  • • 过滤

  • • 筛选

图片

forEach()

遍历每⼀个对象

foreach会从头到尾对数组里的每个元素遍历一遍 ,不会生成新数组,也不改变原数组

回调函数接收三个值,分别是 数组的元素,索引和当前数组

let arr = ["a","b","c","d"]
arr.forEach((el,index,array) => {
    if(el == "b" ) return
    console.log(el,index,array)
})

图片

let ids = [];
dataSource.forEach(x => {
    ids.push(x.id);
}) 

filter()

filter为过滤的意思,也就是说它会把满足条件的元素拿出来形成一个**新的数组**

过滤数据

const dataSource= [
    {id:'00011', name: '燃气具1'},
    {id:'00012', name: '净水器1'},
    {id:'00013', name: '大家电1'},
    {id:'00014', name: '厨房小店1'},
    {id:'00015', name: '生活电器1'},
    {id:'00016', name: '配件1'}
];
const newData = dataSource.filter(v => v.id!=='00011)

过滤数组中不存在的字段,并进行拼接

addressName: [
    provinceName,
    cityName,
    detailaddr,
    contPerson,
    tel,
]
.filter(Boolean)  //过滤掉为null的字段
.join('/'),   //每个字段之间用  /  进行拼接

显示效果:  河南/洛阳/131.....

巧妙的运用filter去除数组中重复的元素:

let phone = ['苹果','锤子','三星','华为','锤子','苹果','小米','锤子']
let result = phone.filter((el,index,arr) => {
  return arr.indexOf(el) == index
})
console.log(result)

图片

map()

和foreach类似,map也会把数组的每一项都遍历一遍,

他会**返回一个新数组**,但是原数组保持不变,

值得注意的是,map不会对空数组进行检测

checkAll = () => {
    const {todos} = this.state
    const newTodo = todos.map((todo) => { 
        return {...todo, done: true}
    })

    this.setState({todos: newTodo})
}

filter VS map

相同点:filter 和 map 都是对数组的操作,均返回一个新的数组,filter()不会改变原始数组,map()同样不会改变原数组

不同点

  • • filter是满足条件的留下,是对原数组的过滤

  • • map则是对原数组的加工 [返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组],映射成一对一映射的新数组

some()

遍历数组的每一项,若其中一项为 true,则返回true;

let arr = [1, 2, 3];
let result = arr.some((item, index, arr) => {
    return item < 2;
})
console.log(result) // true

every()

测试一个数组内的所有元素是否都能通过某个指定函数的测试

如果所有数组项都满足条件则返回true。

它返回一个布尔值。

let arr = [1, 2, 3];
let result = arr.every((item, index, arr) => {
    return item < 2;
})
console.log(result) // false
const isFlag = (currentValue) => currentValue < 40;
const array1 = [1, 30, 39, 29, 10, 13];
console.log(array1.every(isFlag)); // true

find()

找到满足条件的数据:找到返回true,否则undefined

var ages = [3, 10, 18, 20];
 
function checkAdult(age) {
    return age >= 18;
}
 
function myFunction() {
    document.getElementById("demo").innerHTML = ages.find(checkAdult);
} 

myFunction() // 18

includes()

用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。

const arr = ['a','b','c','d']
console.log(arr.includes('a'),arr.includes('e')); 
//   结果 true,false

split()

用于把一个字符串分割成字符串数组。

var b = "f-ff-gg-ll-kkk";
var c = b.split("-",3);
console.log(c);
//["f", "ff", "gg"]

总结与扩展

map()
    - 可以根据原有数组返回一个新数组
    - 需要一个回调函数作为参数,回调函数的返回值会成为新数组中的元素
    - 回调函数中有三个参数:
        第一个参数:当前元素
        第二个参数:当前元素的索引
        第三个参数:当前数组

filter()
    - 可以从一个数组中获得符和条件的元素
    - 会根据回调函数的结果来决定是否保留元素,true保留,false不保留

find()
    - 可以从一个数组中获得符和条件的第一个元素

以上数组方法是在开发过程中经常使用的几个而已,肯定还有其他部分,这里不一一列举。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值