指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
vue3下filter和map联合使用
//通过map实现遍历返回数组对象
const meals = mealOptions.value.map(({ id, title }) => ({ id, title }));

//通过filter实现数据的过滤,这里是过滤掉title为空的对象
const meals = mealOptions.value.filter(({ title }) => title).map(({ id, title }) => ({ id, title }));

//上面的filter实际上可以展开为如下内容
(item) => {
  const title = item.title;
  return title;
}


//分析
const arr = [
  { title: 'Hello' },
  { title: '' },
  { title: 'World' },
  { title: null },
];

const result = arr.filter(item => {
  const title = item.title;
  return title; // 实际上会被转成 Boolean(title)
});

console.log(result);
输出: [ { title: 'Hello' }, { title: 'World' } ]

//原理
因为 filter 的机制是这样的:
array.filter(callback) // callback 要返回 true(保留)或 false(过滤掉)

//以下是转换结果
Boolean('abc')       // true
Boolean('')          // false
Boolean(null)        // false
Boolean(undefined)   // false
Boolean(0)           // false
Boolean(1)           // true


//关于解构和返回值
filter(({ title }) => title) // 参数其实是item对象的展开, 这里只需要title, 返回普通值(比如字符串、布尔、数字、变量)不用括号

map(({ id, title }) => ({ id, title })) // 参数其实是item对象的展开,这里需要id 和 title, 返回“对象字面量”要加括号 { id, title }  等给于 { id:id, title:title }

//原理
JavaScript 对象属性的简写规则:
当你写对象字面量时,如果:键名和变量名相同,就可以省略 key: value 中的 value

解构是按需取字段,不需要全取;
解构对象时字段顺序无所谓;
没有解构的字段就不会创建变量,省内存、提性能,也更干净!


//直接赋值使用obj1 和 obj2 内容是等价的
const id = 1;
const title = 'Hello';

const obj1 = { id, title };
const obj2 = { id: id, title: title };