前端开发中数组

前端开发中,数组是最基础且强大的数据结构之一。JavaScript提供了丰富的数组操作方法,可以满足各种开发需求。

下面我将从基础操作、高阶函数、动态渲染、过滤搜索和表单处理五个方面,为您详细介绍前端数组的实际应用案例。

一、基础数组操作案例

1. 数组创建与转换

// 字符串转数组const str = "get-element-by-id";const arr = str.split("-"); // ["get", "element", "by", "id"]// 类数组对象转数组const nodeList = document.querySelectorAll('div');const nodeArr = Array.from(nodeList); // 将NodeList转换为真正数组

2. 数组清空方法

let arrayList = ['a', 'b', 'c', 'd', 'e', 'f'];// 方法1:直接赋值为空数组arrayList = [];// 方法2:设置length为0arrayList.length = 0; // 推荐此方法,更简洁高效

3. 数组增删改查

const fruits = ['apple', 'banana'];// 添加元素fruits.push('orange'); // 末尾添加fruits.unshift('grape'); // 开头添加// 删除元素fruits.pop(); // 删除最后一个fruits.shift(); // 删除第一个// splice方法(会修改原数组)const removed = fruits.splice(1, 1, 'pear', 'peach'); // 从索引1开始删除1个元素,并添加'pear'和'peach'// removed是被删除的元素数组['banana']

4. 统计学生成绩案例

const scores = [89, 76, 92, 85, 94, 88];// 计算总分和平均分const totalScore = scores.reduce((acc, score) => acc + score, 0);const averageScore = totalScore / scores.length;// 最高分和最低分const highestScore = Math.max(...scores);const lowestScore = Math.min(...scores);console.log(`平均分: ${averageScore}, 最高分: ${highestScore}, 最低分: ${lowestScore}`);

二、数组高阶函数应用案例

1. filter() 过滤方法

// 过滤小于100的数字const nums = [10, 20, 30, 111, 222, 333];const newNums = nums.filter(n => n < 100); // [10, 20, 30]// 过滤素数function get_primes(arr) {  return arr.filter(num => {    if(num === 1) return false;    for(let i=2; i<=Math.sqrt(num); i++) {      if(num % i === 0) return false;    }    return true;  });}

2. map() 映射方法


// 将数字数组每个元素乘以2const doubled = newNums.map(n => n * 2); // [20, 40, 60]// 格式化对象数组const users = [  {name: 'John', age: 25},  {name: 'Jane', age: 30}];const names = users.map(user => user.name); // ['John', 'Jane']

3. reduce() 归约方法


// 数组求和const sum = nums.reduce((acc, n) => acc + n, 0);// 数组去重const dupArr = [1, 2, 2, 3, 4, 4, 5];const uniqueArr = dupArr.reduce((acc, cur) => {  if(!acc.includes(cur)) acc.push(cur);  return acc;}, []);// 统计字符出现次数const str = "javascript";const charCount = [...str].reduce((acc, char) => {  acc[char] = (acc[char] || 0) + 1;  return acc;}, {});

4. 复合使用案例

// 链式调用:先过滤再映射最后求和const total = nums  .filter(n => n < 100)  .map(n => n * 2)  .reduce((acc, n) => acc + n, 0);


三、数组动态渲染案例

1. Vue动态渲染表格

// Vue组件数据data() {  return {    tableData: [      { date: '2016-05-03', name: 'Tom', address: 'No. 189, Grove St' },      { date: '2016-05-02', name: 'Jerry', address: 'No. 189, Grove St' }    ],    columns: [      { prop: 'date', label: '日期' },      { prop: 'name', label: '姓名' },      { prop: 'address', label: '地址' }    ]  };}// 模板部分<el-table :data="tableData">  <el-table-column     v-for="column in columns"     :key="column.prop"    :prop="column.prop"    :label="column.label">  </el-table-column></el-table>


2. 动态添加表单字段

// Vue组件数据data() {  return {    form: {      name: '水果',      goods: [        { name: '西瓜', num: 20 },        { name: '苹果', num: 23 }      ]    }  };}// 添加新商品方法methods: {  addGood() {    this.form.goods.push({ name: '', num: 0 });  }}


四、数组过滤搜索案例

1. 单条件筛选

const products = [  { name: 'iPhone', category: 'electronics', price: 999 },  { name: 'MacBook', category: 'electronics', price: 1299 },  { name: 'T-shirt', category: 'clothing', price: 20 }];// 筛选电子产品const electronics = products.filter(p => p.category === 'electronics');// 筛选价格低于1000的商品const affordable = products.filter(p => p.price < 1000);

2. 多条件复合筛选

// 筛选条件const filters = {  category: 'electronics',  maxPrice: 1000};// 复合筛选const filtered = products.filter(p => {  return (    p.category === filters.category &&     p.price <= filters.maxPrice  );});

3. Vue实现搜索功能

// Vue组件new Vue({  el: '#app',  data: {    search: '',    items: ['Apple', 'Banana', 'Orange', 'Mango', 'Pear']  },  computed: {    filteredItems() {      const search = this.search.toLowerCase();      return this.items.filter(item =>         item.toLowerCase().includes(search)      );    }  }});// HTML部分<div id="app">  <input v-model="search" type="text" placeholder="Search...">  <ul>    <li v-for="item in filteredItems">{{ item }}</li>  </ul></div>

4. 复杂对象数组筛选

const employees = [  { name: 'John', age: 28, department: 'IT', skills: ['JavaScript', 'React'] },  { name: 'Jane', age: 32, department: 'HR', skills: ['Communication'] },  { name: 'Bob', age: 25, department: 'IT', skills: ['JavaScript', 'Node.js'] }];// 多条件筛选:IT部门且会JavaScript的员工const itJsDevs = employees.filter(emp =>   emp.department === 'IT' &&   emp.skills.includes('JavaScript'));// 年龄范围筛选const youngEmployees = employees.filter(emp => emp.age >= 25 && emp.age <= 30);

五、数组表单处理案例

1. 表单数组提交

<!-- 前端表单传递数组数据 --><form action="/submit" method="post">  <input type="text" name="items[]" value="item1">  <input type="text" name="items[]" value="item2">  <input type="text" name="items[]" value="item3">  <button type="submit">提交</button></form><!-- 后端接收到的数据格式为数组 -->

2. Vue动态表单验证

// Vue组件数据data() {  return {    form: {      name: '水果',      goods: [        { name: '西瓜', num: 20 },        { name: '苹果', num: 23 }      ]    },    rules: {      'goods.*.name': [{ required: true, message: '请输入水果名', trigger: 'blur' }],      'goods.*.num': [{ required: true, message: '请输入数量', trigger: 'blur' }]    }  };}// 模板部分<div v-for="(item, index) in form.goods" :key="index">  <el-form-item     :prop="'goods.' + index + '.name'"     :rules="rules['goods.*.name']">    <el-input v-model="item.name" placeholder="水果名"/>  </el-form-item>    <el-form-item     :prop="'goods.' + index + '.num'"     :rules="rules['goods.*.num']">    <el-input v-model="item.num" placeholder="数量"/>  </el-form-item></div>

3. 表单数据处理

// 处理多选框数据const formData = {  name: '用户表单',  hobbies: ['reading', 'swimming', 'coding'] // 多选框选中值};// 提交前处理function prepareSubmit(data) {  // 将数组转换为逗号分隔的字符串  if(Array.isArray(data.hobbies)) {    data.hobbies = data.hobbies.join(',');  }  return data;}// 接收后处理function processReceived(data) {  // 将字符串转换回数组  if(typeof data.hobbies === 'string') {    data.hobbies = data.hobbies.split(',');  }  return data;}

4. 动态表单字段管理

// 添加新字段function addField(form, fieldName) {  if(!form[fieldName]) {    form[fieldName] = [];  }  form[fieldName].push('');}// 删除字段function removeField(form, fieldName, index) {  if(form[fieldName] && form[fieldName].length > index) {    form[fieldName].splice(index, 1);  }}// 示例使用const myForm = { items: [] };addField(myForm, 'items'); // 添加一个空项removeField(myForm, 'items', 0); // 删除第一项


标签:

相关文章

国庆节之后

国庆节之后,秋意渐浓,天空如洗,阳光更加灿烂。在这片美丽的土地上,繁华的都市和静谧的乡村都在庆祝这个重要的节日。国人们以独特的方式,让这个日子充满了色彩和热情。随着金秋的步伐,丰收的季节来临。果园中的...

uni-app

uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者可以编写一套代码,然后发布到 iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/ QQ /钉钉...

甘草露,甘草露,清凉的甘草露

我知道,那是在七月,骄阳似火,百叶窗紧闭的大卧室里一片昏暗。当他慢慢地、静静地咽气时,在那炎热的夏日午后令人窒息的宁静中,忽然街上传来清脆的铃声,一个响亮的声音划破闷人的溽暑,喊道:“清凉的甘草露!太...

javascript 数据处理方法

以下是 JavaScript 中常用的数据处理方法整理,涵盖数组、字符串、对象、数字及数据类型判断等场景:一、数组处理‌遍历与转换‌map():遍历数组并返回新数组,常用于数据映射(如数值加倍)fil...

首屏加载优化全解析

首屏加载‌是指用户打开网页或应用时,首次呈现在屏幕上的内容加载完成的时间。首屏加载速度直接影响用户体验,是前端性能优化的关键指标。‌一、首屏加载的重要性‌‌用户体验‌:快速的首屏加载能减少用户等待时间...

产品生命周期定义与阶段详解

一、核心概念‌产品生命周期(Product Life Cycle)指产品从进入市场到最终退出市场的完整动态过程。该周期由消费者需求变化、技术迭代及市场竞争共同驱动,反映产品在市场中的经济寿命,与物理使...