web前端项目中遇到的一些问题总结(08.23更新)
个人网站 https://iiter.cn 程序员导航站 开业啦,欢迎各位观众姥爷赏脸参观,如有意见或建议希望能够不吝赐教!
写一些最近工作中Vue项目中遇到的问题。
巴啦啦小魔仙,污卡拉,全身变,小本本,出来吧!
会不定期更新,所以建议收藏。
1.获取一个对象的键(key)
在某种特定需求下(未知的Object类型数据),我们想拿到这个未知对象中第一个元素的键(也就是newData)。代码如下
var obj = {
newData: {
name: "二狗",
value: 250
}
}
Object.keys()方法,接受一个object类型的参数,返回的是一个数组,数组内容是当前对象所有的键(key)
因此这个时候我们使用Object.keys(obj)[0]即可获取到上面代码中未知对象中的第一个元素的键(也就是newData),我们console打印一下,安排!
打印结果:
2.判断一个元素是否属于当前对象(是否在此对象中)
我们曾接触过如何判断一个元素是否属于当前数组,其中for循环、forEach、some、map等各种优秀的数组的方法都可轻松解决我们的需求。可当目标换成对象之后,我们该怎么判断这个元素是否属于当前对象呢?依旧用之前的代码,如下
这个时候,我们想判断已知newData是否属于obj
/*后台接收到的值 假装看不见*/
var obj = {
newData: {
name: "二狗",
value: 250
}
};
/*后台接收到的值 假装看不见*/
/*已知的元素*/
var newData = {
name: "二狗",
value: 250
};
key in Object用来判断一个元素是否属于当前对象。key为键值对的键,字符串类型,Object为对象类型。返回一个布尔值。例如"newData" in obj,返回true。
打印结果:

3.对一个数组对象中的某个属性进行排序,返回一个新的数组对象
如下图,我们想对当前obj数组对象中的age属性进行从小到大的排序,返回一个新的数组对象。
var obj = [
{
name: "四狗",
age: 10
},
{
name: "大狗",
age: 30
},
{
name: "三狗",
age: 15
},
{
name: "二狗",
age: 18
}
];
sort() 方法用于对数组的元素进行排序。
我们都知道,利用sort方法可以用来对数组中的元素进行排序,引用的是当前数组,返回的是一个新数组。在这里,我们就可以使用一个sort排序函数来实现我们想要的功能。代码如下:
obj.sort(function(a,b){
return a.age - b.age
})
打印结果:
扩展:数据如下,提出这样一个需求,obj数组对象按height属性从小到大排序,如果height相同,则按age从小到大排序。
var obj = [{
name: "四狗",
age: 10,
height: 80
},
{
name: "大狗",
age: 30,
height: 160
},
{
name: "三狗",
age: 15,
height: 80
},
{
name: "二狗",
age: 18,
height: 100
}
]
依旧使用我们的sort函数扩展 ,代码如下:
obj.sort(function (a, b) {
if (a.height !== b.height) {
return a.height - b.height;
} else {
return a.age - b.age;
}
})
打印结果:
4.深拷贝和浅拷贝
浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。
深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。
浅拷贝:代码如下,我们定义了一个obj对象,和一个newObj对象,并让newObj的person等于指向obj对象(实则是将newObj的person属性指向obj对象的指针),所以改变newObj.person.name的值,实则是改变obj.name的值。
var obj = {
id: 123,
name: "二狗",
address: "china"
}
var newObj = {}
newObj.person = obj; //浅拷贝
newObj.person.name = "三狗"
console.log(obj.name); //打印三狗
深拷贝 :代码如下,定义obj对象和newObj对象,在给newObje对象的person属性赋值的时候,我们用JSON.parse(JSON.stringify(obj))方法将obj深拷贝了一份,也就是说重新申请了一个空间,与原对象不共享内存,属于完全独立的存在,所以在改变newObj.person.name属性之后,obj.name是不会跟着发生改变的。
var obj = {
id:123,
name:"二狗",
address:"china"
}
var newObj = {}
newObj.person = JSON.parse(JSON.stringify(obj)); //深拷贝
newObj.person.name="三狗"
console.log(obj.name);// 打印二狗
具体在业务中使用哪个,还得根据自己的业务需求。当然,深拷贝的方法也有很多个,这里只列出常用的一种方法,JSON.parse(JSON.stringify())
推荐一首不久前在网易云音乐里Get√的一首纯音乐《寂静之声》,超赞,很适合撸代码的时候静静地听。
人要是不给自己一点目标,真的是会越来越懒的啊。今天就这么多,下次再更吧23333。08.23
这里有324.57GB的修仙资料。嘿嘿嘿你懂得。/手动狗头
那么问题来了,如果你也想入坑前端或者学习更多技术,广交天下朋友(基友),认识更多有趣的灵魂的话,欢迎加入前端交流群鸭~
扫二维码加为好友就完事了!安排~
web前端项目中遇到的一些问题总结(08.23更新)的更多相关文章
- 网站静态化处理—web前端优化—中(12)
网站静态化处理—web前端优化—中(12) Web前端很多优化原则都是从如何提升网络通讯效率的角度提出的,但是这些原则使用的时候还是有很多陷阱在里面,如果我们不能深入理解这些优化原则背后所隐藏的技术原 ...
- Angular02 通过angular-cli来搭建web前端项目
利用angular-cli的常见命令: npm i --save 包名 -> 软件依赖 npm i --save-dev 包名 -> 开发依赖 ng new 项 ...
- 如何打造一个"逼格"的web前端项目
最近利用空余的时间(坐公交车看教程视频),重新了解了前后端分离,前端工程化等概念学习,思考如何打造一个“逼格”的web前端项目. 前端准备篇 前端代码规范:制定前端开发代码规范文档. PS:重中之中, ...
- 在Vue&Element前端项目中,使用FastReport + pdf.js生成并展示自定义报表
在我的<FastReport报表随笔>介绍过各种FastReport的报表设计和使用,FastReport报表可以弹性的独立设计格式,并可以在Asp.net网站上.Winform端上使用, ...
- 在Vue&Element前端项目中,对于字典列表的显示处理
在很多项目开发中,我们为了使用方便,一般都会封装一些自定义组件来简化界面的显示处理,例如参照字典的下拉列表显示,是我们项目中经常用到的功能之一,本篇随笔介绍在Vue&Element前端项目中如 ...
- Web API项目中使用Area对业务进行分类管理
在之前开发的很多Web API项目中,为了方便以及快速开发,往往把整个Web API的控制器放在基目录的Controllers目录中,但随着业务越来越复杂,这样Controllers目录中的文件就增加 ...
- web前端开发中常用的尺寸和位置
我们在日常web前端开发过程中,会经常用到各种尺寸和位置.通常是js做动画的时候.轮播图,滚屏动画,粒子,碰撞检测,拖拽,滚动加载等等.这里我将常用的尺寸和位置的获取进行总结,不包括canvas,SV ...
- WEB前端开发中的图片压缩
web前端开发中,图片的重要性不言而喻,而由于一些图片的大小加上现在国内的网速不给力等种种原因,我们非常有必要对网站使用的图片进行压缩,压缩图片必然会带来图片质量的损失,我们要尽可能的在质量降低很小的 ...
- Web前端开发中的MCRV模式(转)
作者: izujian 来源: baiduux 摘要:针对前端开发中基于ajax的复杂页面开发所面临的代码规模大,难以组织和维护,代码复用性.扩展性和适应性差等问题,本文尝试以MVC思想为 基础,结 ...
随机推荐
- PTA | 1008 数组元素循环右移问题 (20分)
一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1--AN-1)变换为(AN-M -- AN-1 A0 ...
- 数据库学习 day2 检索数据
上一节我们介绍了什么是数据库,以及一些基本的数据库术语 这一课介绍使用SELECT语句从表中检索一个或多个数据列. 关键字(Keyword) 作为SQL组成部分的保留字.关键字不能用作表和列的名字(类 ...
- mysql 聚集函数 count 使用详解
mysql 聚集函数 count 使用详解 本文将探讨以下问题 1.count(*) . count(n).count(null)与count(fieldName) 2.distinct 与 coun ...
- 如何设置微信小程序顶部标题
直接在对应的xxx.json中支配如下,就可以了哈 { "backgroundTextStyle": "light", //字体 "navigatio ...
- css进阶选择器
后代选择器 用空格隔开 选择div标签下的p标签下的a标签 div p a 选择class为parent标签下的p标签下的a标签 .parent p a 后代选择器可以是标签.类.id的混合体 后代选 ...
- (js描述的)数据结构[栈结构](2)
(js描述的)数据结构[栈结构](2) 一.什么是栈结构 1.一种受限制的线性结构,这种结构可以基于数组来实现. 2.可以抽象成一个容器,上面的是栈顶,底下的是栈底.所以仅允许对栈顶进行操作, 二.栈 ...
- MySQL入门,第二部分,必备基础知识点
一.数据类型 日期和时间数据类型 date 字节 日期,格式:2014-09-18 日期和时间数据类型 time 字节 时间,格式:08:42:30 日期和时间数据类型 datetime 字节 日期时 ...
- hadoop(八)集群namenode启动ssh免密登录(完全分布式五)|10
前置章节:hadoop集群配置同步(hadoop完全分布式四)|10 启动namenode之前: 1. 先查看有无节点启动,执行jps查看,有的话停掉 [shaozhiqi@hadoop102 ~]$ ...
- Linux的文本编辑和文本内容查看命令
Linux的文本编辑和文本内容查看命令 1.文本编辑命令 vi:用于编辑文本文件,基本上可以分为三种模式,分别是一般模式.编辑模式.命令行模式. 一般模式:当编辑一个文件时,刚进入文件就是一般模 ...
- AJ学IOS(12)UI之UITableView学习(上)LOL英雄联盟练习
AJ分享,必须精品 先看效果图 源代码 NYViewController的代码 #import "NYViewController.h" #import "NYHero. ...