数据类型set

作用和数组类似,和数组不同的是:它不能存放重复的元素

  • 应用场景:数组去重

  • eg01:基本使用

let set1 = new Set([10, 20, 30, 40, 10, 20, 30, 50]);
console.log(set1); // Set(5) { 10, 20, 30, 40, 50 }
  • eg02:数组去重
let arr = [10, 20, 30, 40, 10, 20, 30, 50];
let set = new Set(arr);
console.log(set); // Set(5) { 10, 20, 30, 40, 50 }
let arrNew = [...set];
console.log(arrNew); // [ 10, 20, 30, 40, 50 ]
  • eg03:数组去重,把上面操作变成一句话
let arr = [10, 20, 30, 40, 10, 20, 30, 50];
let arrNew = [...new Set(arr)];
console.log(arrNew); // [ 10, 20, 30, 40, 50 ]

模板字符串

  • es5

字符串没有格式,里面也不能写变量

  • es6

模板字符串

let author = "波波";
let str = `静夜思${author}床前明月光,低下鞋两双,举头望明月,低头思阿香.`;
console.log(str);
  • eg01:
let name = "千里";
let age = 38;
let score = 100;
console.log(`我的名字是${name},我的年龄是${age},我的成绩是${score}`);
  • eg02:
function test() {return "哈哈哈";
}
console.log(`我是神雕大侠,我在笑:${test()}`); // 我是神雕大侠,我在笑

补充数组的方法

1.forEach()

遍历数组,把遍历出来的每一项交给回调函数.

没有返回值

let arr = [10, 20, 30, 40];
arr.forEach(function (item, index) {// item 就是遍历出来的每一项// index就是遍历出来的每一项对应的索引console.log(item, index);
});

eg01:

let arr = [10, 20, 30, 50, 33, 22];
let max = -Infinity;arr.forEach((item, index) => {if (item > max) {max = item;}
});
console.log(max); // 50

2.map()

遍历数组的,有返回值

let arr = [10, 20, 30, 40];
let arrNew = arr.map(function (item, index) {// item 就是遍历出来的每一项// index就是遍历出来的每一项对应的索引//   console.log(item, index);return item * item;
});
console.log(arrNew); // [ 100, 400, 900, 1600 ]

3.filter(); 过滤器

filter()方法会返回一个新的数组,新的数组中的元素是通过检查后符合条件的元素

eg01:

let arr = [10, 20, 11, 21, 30, 31, 34, 56, 67];
let arrNew = arr.filter(function (item, index) {// item 就是遍历出来的每一项// index就是遍历出来的每一项对应的索引//   console.log(item, index);return item % 2 == 0; // 如果条件成立,会返回当前项,如果条件不成立,不会返回当前项
});
console.log(arrNew); // [ 10, 20, 30, 34, 56 ]

eg02:

let arr = [{ name: "波波", age: 38 },{ name: "千里", age: 18 },{ name: "哲锴", age: 28 },{ age: 45 },
];let arrNew = arr.filter((item, index) => {return item.name;
});
console.log(arrNew);

补充对象解构赋值

let obj = {name: "波波",age: 38,gender: "男",score: 100,
};// 1.
// let { name, age, gender, score } = obj;
// console.log(name, age, gender, score); // 波波 38 男 100// 2. obj2就相当于是obj对象里面除了name属性之前的属性们组成的一个对象
let { name, age, ...obj2 } = obj;
console.log(obj2); // { gender: '男', score: 100 }

数组降维

// 数组降维: 把二维数组降低地道一维数组
var arr = [[10, 20],[30, 40, 50],[60, 70],
];
// 使用扩展运算符...
var arrNew = [];
// 遍历二维数组
arr.forEach((v) => {//   console.log(v);arrNew.push(...v);
});
console.log(arrNew); // [10, 20, 30, 40, 50, 60, 70]
// 数组降维: 把二维数组降低地道一维数组
var arr = [10, 20, [30, 40, 50], 60, 70];
// 使用扩展运算符...
var arrNew = [];
// 遍历二维数组
arr.forEach((v) => {if (Array.isArray(v)) {arrNew.push(...v);} else {arrNew.push(v);}
});
console.log(arrNew); // [10, 20, 30, 40, 50, 60, 70]

数组去重

数组去重:把数组中重复的项给去掉

  • 一: 补充去重的方法1:排序后判断法
var arrNew = [];
// 排序
arr.sort((a, b) => {return a - b;
});
console.log(arr); // [10, 10, 20, 20, 30, 40, 50]
// 判断
arr.forEach((v, i) => {if (v !== arr[i + 1]) {arrNew.push(v);}
});
console.log(arrNew); // [ 10, 20, 30, 40, 50 ]
  • 二:补充去去重的方法2:使用对象法

原理:是利用的对象的属性不能重名

对象的语法复习:

取值:

属性名不存在,取出的是undefined

属性名存在,取出的肯定是对应的属性值

赋值:

属性名不存在,就相当于是动态的添加属性

属性名存在,那就修改原来的属性值

var obj = {}; // 检测有没有重复的元素
var arrNew = []; // 去重后存放元素的数组
// 遍历要去重的数组
arr.forEach((v) => {// 判断if (obj[v] == undefined) {arrNew.push(v); // 不存在就把当前这个v存起来obj[v] = "值"; // 把当前这个元素作为obj对象的属性存进obj对象里}
});
console.log(arrNew); // [ 10, 20, 30, 40, 50 ]

数组升维

var arr = [{ type: "电子产品", name: "iPhone", price: 8888 },{ type: "家具", name: "桌子", price: 100 },{ type: "食品", name: "瓜子", price: 10 },{ type: "家具", name: "椅子", price: 380 },{ type: "电子产品", name: "小米手机", price: 1380 },{ type: "食品", name: "辣条", price: 5 },{ type: "食品", name: "咖啡", price: 50 },
];var obj = {};
var arrNew = [];arr.forEach((v) => {//   console.log(v);if (obj[v.type] === undefined) {// 第一次出现这个产品类型obj[v.type] = 1;// 把当前遍历出来的这个数据存进arrNew中arrNew.push({type: v.type,data: [v],});} else {arrNew.forEach((v2, j) => {if (v.type === v2.type) {arrNew[j].data.push(v);}});}
});
console.log(arrNew);

输出结果如下:

Nodejs Set和Map的使用相关推荐

  1. nodejs mysql 异步_Gearman + Nodejs + MySQL UDF异步实现 MySQL 到 Redis 的数据同步

    1, 环境 CentOS, MySQL, Redis, Nodejs Redis是一个开源的K-V内存数据库,它的key可以是string/set/hash/list/...,因为是基于内存的,所在访 ...

  2. 七天学会NodeJS

    2019独角兽企业重金招聘Python工程师标准>>> NodeJS基础 什么是NodeJS JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充 ...

  3. 教你在Nodejs中如何获取当前函数被调用的行数及文件名

    苏格团队 作者:MaxPan 交流QQ群:855833773 背景 在自定义Egg.js的请求级别日志这篇文章中,我们实现了自定义请求级别的日志模块.看上去功能是完整了,但好像还缺点什么. 大家在根据 ...

  4. 苏宁Nodejs性能优化实战

    Nodejs 项目背景介绍 \\ 自 2016 年以来,苏宁大规模的使用了基于 Nodejs 渲染的项目,架构使用 Nginx+Nodejs+PM2 组合,其中 Nodejs 版本从最初的 6.0+ ...

  5. nodejs学习资料

    2019独角兽企业重金招聘Python工程师标准>>> NodeJS基础 什么是NodeJS JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充 ...

  6. vue前端用服务器上路径的图片展示_5分钟教你用nodeJS手写一个mock数据服务器

    对于前端开发者而言,javascript正扮演着越来越重要的地位,它不仅能为浏览器端赋能,在web服务器方面也有很大的价值(我们可以用nodeJS来写服务端代码,启动web服务器),因此本文所要描述的 ...

  7. 在WebStorm里配置watcher实现编辑less文件时自动生成.map和压缩后的.css文件

    1.操作前确定成功安装less,检测方法,在命令行(cmd),输入lessc -v,看到如下类似内容,则说明安装过了.    如果需要生成压缩后的css的文件,则需要通过以下命令安装插件 npm in ...

  8. js foreach用法_使用 nodejs 写爬虫(一): 常用模块和 js 语法

    本篇是使用 nodejs 写爬虫系列教程的第一篇, 介绍了使用 nodejs 写爬虫过程中常用的模块和一些必须掌握的 js 语法 <!-- more --> 常用模块 常用模块有以下几个: ...

  9. java 获取nodejs端Gson数据案例(请求MongoDB)

    java  获取nodejs端Gson数据案例 原理:这是一个demo,主要通过java向nodejs端发送请求,nodejs端向mongodb请求数据,并将请求的数据以Gson的格式返回给java端 ...

最新文章

  1. 具有Python&OpenCV的本地二进制模式
  2. 安装Win8后必做的优化
  3. 浅谈模型压缩之量化、剪枝、权重共享
  4. VTK:网格之SimpleElevationFilter
  5. mysql自动生成日期序列号_mysql – 在一天内为实体生成唯一的序列号
  6. sybase函数学习(八)
  7. python爬虫---代理、Cookie、模拟登录古诗文网
  8. POI读取word模板,根据list动态添加表格,按照字段填充
  9. chrome 插件开发入门
  10. bootstrap重置按钮
  11. nginx 配置基于域名的虚拟主机
  12. 2013 年 2 月专访董明珠
  13. Maven项目无法引入 Maven Dependencies Libraries 问题
  14. vue使用lodop.js实现前端标签打印
  15. ! LaTeX Error: File xxx.sty not found-统一解决办法
  16. oss连接的简单实现与文件的简单获取
  17. Fast R-CNN 论文详读
  18. 蚂蚁金服6面,成功唬住面试官拿了36K,突然感觉Java面试貌似不太难...
  19. unity3d 禁用脚本
  20. 公文国标字体(仿宋GB_2312和楷体GB_2312)

热门文章

  1. getvod.php_音视频播放_PHP SDK_服务端SDK_视频点播 - 阿里云
  2. datax 定时执行多个job_DataX在有赞大数据平台的实践
  3. android 字符串转浮点,Android String类型转换为float、double和int的工具类方法
  4. python+Django学习资源汇总-更新中
  5. 对mysql进行压力测试_mysqlslap对mysql进行压力测试
  6. 201521123060 《Java程序设计》第11周学习总结
  7. asp.net关于如何准许api跨域访问
  8. 菜鸟ING的博客终于开园了。
  9. IT职场健康杀手与应对宝典 (虽然是IT职场,可是对于常上网的ggmm也是很有用的)...
  10. (9)进程---JoinableQueue队列