web前端项目中遇到的一些问题总结(08.23更新)

13 篇文章 1 订阅
11 篇文章 1 订阅

个人网站 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的修仙资料。嘿嘿嘿你懂得。/手动狗头
前端入坑全套教学视频
那么问题来了,如果你也想入坑前端或者学习更多技术,广交天下朋友(基友),认识更多有趣的灵魂的话,欢迎加入前端交流群鸭~
扫码加群哦
扫二维码加为好友就完事了!安排~

  • 0
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,根据您的要求,以下是Python代码实现: ``` import csv constellation_list = [ ('Aries', '03.21-04.19'), ('Taurus', '04.20-05.20'), ('Gemini', '05.21-06.21'), ('Cancer', '06.22-07.22'), ('Leo', '07.23-08.22'), ('Virgo', '08.23-09.22'), ('Libra', '09.23-10.23'), ('Scorpio', '10.24-11.22'), ('Sagittarius', '11.23-12.21'), ('Capricorn', '12.22-01.19'), ('Aquarius', '01.20-02.18'), ('Pisces', '02.19-03.20') ] def get_constellation(month, day): day_in_month = [ 0, # 0 位未使用 20, # 1 - 1 月 50, # 2 - 2 月 79, # 3 - 3 月 110, # 4 - 4 月 141, # 5 - 5 月 172, # 6 - 6 月 203, # 7 - 7 月 234, # 8 - 8 月 265, # 9 - 9 月 295, # 10 - 10 月 325, # 11 - 11 月 355, # 12 - 12 月 ] if month < 1 or month > 12 or day < 1 or day > 31: return "输入日期错误!" if day < day_in_month[month]: return constellation_list[month-1][0] else: return constellation_list[month][0] def get_constellation_by_date(date): try: year = int(date[0:4]) month = int(date[4:6]) day = int(date[6:8]) except: return "输入日期错误!" return get_constellation(month, day) with open('const.csv', 'r', encoding="UTF-8") as csvfile: reader = csv.reader(csvfile) for row in reader: name = row[0] month = int(row[1]) day = int(row[2]) correct_name = get_constellation(month, day) if correct_name != name: print('有错:{} 的生日是{}月{}日,应该是{}座,而不是{}座'.format(name, month, day, correct_name, name)) print(get_constellation_by_date('19930918')) print(get_constellation_by_date('20200231')) ``` 上面的代码,我们在代码最开始定义了星座列表`constellation_list`,里面存放了每个星座的名字及其起止日期。 接着,我们定义了一个`get_constellation()`函数,用于根据月份和日期计算对应的星座名称。该函数的实现过程为:首先,创建了一个存放每月最后一天的列表`day_in_month`,其0位未使用,1~12位为相应月份的最后一天;然后,如果输入的月份或日期不合法,就返回一个“输入日期错误!”的提示;否则,当输入的日期小于相应月份的最后一天时,返回相应的星座名称,否则返回下一个月份的星座名称。 接着,我们定义了一个`get_constellation_by_date()`函数,用于读取`const.csv`文件并根据用户输入的出生日期获取对应的星座名称。该函数首先尝试将输入日期的年、月、日解析成整数,如果出错则返回一个“输入日期错误!”的提示;否则,调用`get_constellation()`函数计算对应的星座名称并返回。 最后,我们读取了`const.csv`文件并分别调用了`get_constellation_by_date()`函数获取了两个日期的星座名称,分别为白羊座和“输入日期错误!”(因为2月份只有28/29天,而这里输入的是30号,所以日期不合法)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值