crm踩坑记(一)
目录
antd
antd2.0.1里的Cascorder这个组件,它的defaultValue不起作用,是一个bug。当我发现这是一个bug的时候,应该想着如何去避免这个bug,比如使用value, 而不是告诉别人这是个bug。要学会自己解决问题!!!
es6
Object.entries()
Object.entries()方法返回给定对象自己的枚举属性[key, value]对的数组。其顺序和与for...in循环提供的顺序相通,区别在于for...in循环枚举原型中的属性。
下面看例子:
const Person = {
name: 'yuzf',
age: '18',
gender: 'man',
};
// [['name': 'yuzf'], ['age': 18], ['gender', 'man']]
console.log(Object.entries(Person));
const result = {};
// 数组解构/for of 循环
for (const [key, value] of Object.entries(Person)) {
// good
result[key] = value;
// bad
// result.key = value;
}
Object.keys()
Object.keys()返回一个数组,其元素是对应于直接在对象上发现的可枚举属性的字符串(即不包含原型链上的)。属性的顺序与通过手动循环对象的属性给出的顺序相同。
下面直接看代码说明:
const arr1 = ['a', 'b', 'c'];
console.log(Object.keys(arr1)); // ['0', '1', '2']
const person = {
name: 'yuzf',
age: 18,
gender: 'man',
};
for (const key of Object.keys(person)) {
console.log(key); // name, age, gender
}
Object.getOwnPropertyNames()
Object.getOwnPropertyNames()方法返回一个直接发现给定对象的所有属性(可枚举和不可枚举)的数组。
下面看代码例子:
const arr = ['a', 'b', 'c'];
console.log(Object.getOwnPropertyNames(arr).sort);
// logs: ['0', '1', '2', 'length']
const arr2 = {
name: 'yuzf',
age: 18,
gender: 'man',
};
console.log(Object.getOwnPropertyNames(arr).sort);
// logs: ['name', 'age', 'gender']
很神奇的用法!!!
之前,我也遇到这样的需求, 将一个数组里包含的多个对象转成一个对象,结构像下面这个样子:
// origin
const Person = [
{ name: 'yuzf'},
{ age: 18 },
{ gender: 'man' },
];
// to => this
{
name: 'yuzf',
age: 18,
gender: 'man',
}
// do
const obj = Person.reduce((x, y) => Object.assign({}, x, y), {})
eslint
Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins, 大概的意思是不要使用对象原型上的方法,因为原型上的方法可能被重写了。This is why。
那么该如何避免这个问题呢?下面请看代码:
// bad
if (obj.hasOwnProperty('name')) {
}
// good
if (Object.prototype.hasOwnProperty.call(obj, 'name')) {
}
傻逼
可能是自己代码写着写着就将自己写懵了,fields.concat(['xx']), 这行代码执行后, 怎么fields的值没有变化。
这真是一件很傻的事情。
其他
- 一个简单的需求并不是看起来那么简单。
- 自己写的代码,一定要多测试,一定一定要!!!
- 这次向线上的数据库里插入了脏数据,以后遇到加了字段的需求,一定要多测试,多考量。
参考
mdn: Object.entries()
mdn: Object.keys()
mdn: Object.getOwnPropertyNames()
crm踩坑记(一)的更多相关文章
- crm踩坑记(二)
Linux tmux 如何查看 tmux如何进行滚动呢? prefix + [, prefix为tmux的前置动作,默认是ctrl + b. 使用方向键或者pageUp来进行翻页. q可以退出滚动模式 ...
- crm踩坑记(三)
React 如何同步更新state 由于setState方法是异步的,而通常很多时候在一个生命周期里更新state后需要在另一个生命周期里使用这个state. 下面介绍几个方法 // 1 this.s ...
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- Spark踩坑记——数据库(Hbase+Mysql)
[TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...
- 【踩坑记】从HybridApp到ReactNative
前言 随着移动互联网的兴起,Webapp开始大行其道.大概在15年下半年的时候我接触到了HybridApp.因为当时还没毕业嘛,所以并不清楚自己未来的方向,所以就投入了HybridApp的怀抱. Hy ...
- Spark踩坑记——共享变量
[TOC] 前言 Spark踩坑记--初试 Spark踩坑记--数据库(Hbase+Mysql) Spark踩坑记--Spark Streaming+kafka应用及调优 在前面总结的几篇spark踩 ...
- Spark踩坑记——从RDD看集群调度
[TOC] 前言 在Spark的使用中,性能的调优配置过程中,查阅了很多资料,之前自己总结过两篇小博文Spark踩坑记--初试和Spark踩坑记--数据库(Hbase+Mysql),第一篇概况的归纳了 ...
- djangorestframework+vue-cli+axios,为axios添加token作为headers踩坑记
情况是这样的,项目用的restful规范,后端用的django+djangorestframework,前端用的vue-cli框架+webpack,前端与后端交互用的axios,然后再用户登录之后,a ...
- HttpWebRequest 改为 HttpClient 踩坑记-请求头设置
HttpWebRequest 改为 HttpClient 踩坑记-请求头设置 Intro 这两天改了一个项目,原来的项目是.net framework 项目,里面处理 HTTP 请求使用的是 WebR ...
随机推荐
- 2018.12.14 Mac的Matlab2018a软件及其安装步骤
软件百度云链接:https://pan.baidu.com/s/1q3EO5up-1YuAQ4gEi7sTwQ 密码:p6mf MATLAB R2018a for Mac破解说明 1.MATLAB R ...
- 2018.9.17 面试问题-----如何对List集合中的元素进行排序?
Collections对List集合中的数据进行排序 有时候需要对集合中的元素按照一定的规则进行排序,这就需要用到 Java中提供的对集合进行操作的工具类Collections,其中的sort方法 先 ...
- EF Ccore 主从配置 最简化
业务需要 配置一主多从数据库 读写分离 orm用的ef core , 把思路和代码写下 1. 配置2个数据库上下文 ETMasterContext ETSlaveContext(把增删改功能禁用掉 ...
- MVC学习五:Razor布局页面 _ViewStart.cshtml
如图: _ViewStart.cshtml就是MVC中的布局页面/模板页面. 用户访问流程图: 原理:先去执行Views文件夹下[_ViewStart.cshtml]页面,然后同级目录文件夹(上图中的 ...
- 【luogu P1231 教辅的组成】 题解
题目链接:https://www.luogu.org/problemnew/show/P1231 对于每本书只能用一次,所以拆点再建边 #include <queue> #include ...
- 用java语言编写的简单二叉树
package com.cjonline.foundation.evisa; public class TestTree { private int data=-1; private TestTree ...
- 使用 get post 注意事项
快速判断: 如下情况使用GET方法:客户端与服务端的交互像是一个提问(如查询操作.搜索操作.读操作) 如下情况使用POST方法: 1.交互是一个命令或订单(order),比提问包含更多信 ...
- java流汇总以及使用实例
流一.基本概念 Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件.内存.键盘.网络) 读入到内存中,形成了流,然后将这些流还可以写到另外的目的地 ...
- svn使用过程中遇到的问题
前言:记录一下svn使用的过程中遇到的问题 最近的公司使用的svn来管理项目,因为这个项目接手过来已经有至少一年多的工龄了,所以暂且还是也用svn来处理吧,如果要是做新项目的话,真心地希望使用Git来 ...
- iOS | CAShapeLayer转场动画
什么也不说了,作为一名乐于分享技术的小开发,直接先上个样式最为直观贴切,有需要的朋友可以直接拿过去用. 需要demo请点击这里 :github 在这个demo中,核心为选用画布CAShapeLayer ...