一只小强

天道酬勤 厚德载物


  • 首页

  • 标签24

  • 分类8

  • 归档30

  • 公益

  • 搜索

JavaScript模块化

发表于 2019-03-13 | 分类于 JavaScript

what模块化?

图片

未完待续。。。

操作update时报错不能更新from出来的数据

发表于 2019-03-13 | 分类于 MySql

You can’t specify target table ‘xsdb’ for update in FROM clause参考

错误写法总结:不能先select出同一表中的某些值,再update这个表(在同一语句中),即不能依据某字段值做判断再来更新某字段的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
-- 根据条件批量更新逾期时间
UPDATE XSDB set JSRQ = 1609430399999 where GUID in (
SELECT
-- FROM_UNIXTIME(xsd.JSRQ/1000, '%Y-%m-%d %H:%i:%S') AS JSRQQ,
`xsd`.GUID
FROM
(
SELECT dqdd.CJJXSID, dqdd.SHJXSID FROM DDB dqdd WHERE dqdd.GUID = 906000029082
) AS ydd,
`DDB` AS `dd`
INNER JOIN `XSDB` AS `xsd` ON `dd`.`GUID` = `xsd`.`DDID`
WHERE
`dd`.`CJJXSID` = ydd.CJJXSID
AND `dd`.`SHJXSID` = ydd.SHJXSID
AND `dd`.`DDZT` = '1'
AND `dd`.`DDLX` IN (1, 2, 9)
AND `dd`.`WSZJE` >= 0
AND `dd`.`ZTBS` = 'E'
AND `xsd`.`WSZJE` >= 0
AND `xsd`.`JSRQ` < UNIX_TIMESTAMP(NOW())*1000
AND `xsd`.`ZTBS` = 'E'
AND `xsd`.`CWHXZT` = '0'
AND `xsd`.`ZJE` > '0'
)

正确写法总结:将SELECT出的结果再通过中间表SELECT一遍,这样就规避了错误;需要注意的是,这个问题只出现于MySQL,MSSQL和Oracle不会出现此问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
-- 根据条件批量更新逾期时间
UPDATE XSDB set JSRQ = 1609430399999 where GUID in (
select lsXSDB.GUID from (
SELECT
FROM_UNIXTIME(xsd.JSRQ/1000, '%Y-%m-%d %H:%i:%S') AS JSRQQ,
`xsd`.*
FROM
(
SELECT dqdd.CJJXSID, dqdd.SHJXSID FROM DDB dqdd WHERE dqdd.GUID = 906000029082
) AS ydd,
`DDB` AS `dd`
INNER JOIN `XSDB` AS `xsd` ON `dd`.`GUID` = `xsd`.`DDID`
WHERE
`dd`.`CJJXSID` = ydd.CJJXSID
AND `dd`.`SHJXSID` = ydd.SHJXSID
AND `dd`.`DDZT` = '1'
AND `dd`.`DDLX` IN (1, 2, 9)
AND `dd`.`WSZJE` >= 0
AND `dd`.`ZTBS` = 'E'
AND `xsd`.`WSZJE` >= 0
AND `xsd`.`JSRQ` < UNIX_TIMESTAMP(NOW())*1000
AND `xsd`.`ZTBS` = 'E'
AND `xsd`.`CWHXZT` = '0'
AND `xsd`.`ZJE` > '0'
) lsXSDB
)

Sequelize踩的坑

发表于 2019-03-13 | 分类于 MySql

save篇

contract_id设置了主键,save不支持赋值更改

1
2
3
4
5
6
7
8
let contractGood = yield models.ContractGood.findOne({
where: {
GUID: 1333170
},
transaction: t
});
contractGood.contract_id = '111111111111111111111111';
yield contractGood.save({ transaction: t });

正确使用方式update或delete contractGood.contract_id 再赋值,save操作

1
yield models.ContractGood.update({ contract_id: '22222' }, {where: {GUID: 1333170}, transaction: t})

涉及到更改主键,一定慎重

react组件事件绑定监听

发表于 2019-03-13 | 分类于 Reactjs

定义和用法

addEventListener() 方法用于向指定元素添加事件句柄。

element.addEventListener(event, function, useCapture)

removeEventListener() 方法用于移除由 addEventListener() 方法添加的事件句柄。

element.removeEventListener(event, function, useCapture)

如果要移除事件句柄,addEventListener() 的执行函数必须使用外部函数,如myFun,匿名函数,类似 “document.removeEventListener(“event”, function(){ myScript });” 该事件是无法移除的。

场景:绑定回车事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Demo extends Components{
componentDidMount(){
document.addEventListener('keydown',this.handleEnterKey);
}
componentWillUmount(){
document.removeEventListener('keydown',this.handleEenterKey);
}
handleEnterKey = (e) => {
if(e.keyCode === 13){
//do somethings
}
}
render(){
<div>hello,world!</div>
}
}

序列化接口入参到query中

发表于 2019-03-13 | 分类于 JavaScript

请求接口时,序列化参数到query中,只支持2层数据(如果多层,需要使用递归),如果参数中有undefined,会将其删除

1
2
3
4
5
6
7
8
9
10
export const stringify = (params = {}) => {
const copyParams = params;
Object.keys(copyParams).forEach((k) => {
if ((_.isObject(copyParams[k]) || _.isArray(copyParams[k])) && !_.isEmpty(copyParams[k])) {
copyParams[k] = JSON.stringify(copyParams[k]);
}
})
const newParams = JSON.parse(JSON.stringify(copyParams));
return qs.stringify(newParams);
}

var const let作用域

发表于 2019-03-08 | 分类于 JavaScript

1.与第二个情况对比

1
2
3
4
5
6
7
8
9
10
11
const fn2 = () => {
var a1 = 88;
const fn1 = () => {
console.log('1~~~~', a1)
let a1 = 999;
}
fn1();
console.log('2~~~~',a1)
}
fn2();
// 第4行 VM270:4 Uncaught ReferenceError: a1 is not defined

总结:函数会从自身的活动对象开始,一层层向上寻找自己所需的变量,该函数在寻找a1时发现,自己的作用域里声明了let,它就不会再往上找,而let在声明之前是不可用的,所以就会报错

2.与第一个情况对比

1
2
3
4
5
6
7
8
9
10
11
12
const fn2 = () => {
var a1 = 88;
const fn1 = () => {
console.log('1~~~~', a1)
a1 = 999;
}
fn1();
console.log('2~~~~',a1)
}
fn2();
// 1~~~~ 88
// 2~~~~ 999

3.执行let a1的时候不会报错

1
2
3
4
5
6
7
8
9
10
const fn2 = () => {
var a1 = 88;
const fn1 = () => {
let a1 = 999;
}
fn1();
console.log('2~~~~',a1)
}
fn2();
// 2~~~~ 88

4.与1对比,执行let a1的时候报错

1
2
3
4
5
6
7
8
9
10
11
const fn2 = () => {
var a1 = 88;
const fn1 = () => {
var a1 = 777;
let a1 = 999;
}
fn1();
console.log('2~~~~',a1)
}
fn2();
// 第5行 Uncaught SyntaxError: Identifier 'a1' has already been

table合并单元格

发表于 2019-03-08 | 分类于 HTML

合并行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

<table>
<thead>
<tr>
<th>id</th>
<th>name</th>
<th>age</th>
<th>other</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td rowspan='3'>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>1</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>1</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
</tbody>
</table>

































id name age other
1 2 3 4
1 3 4
1 3 4
1 2 3 4

合并列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

<table>
<thead>
<tr>
<th>id</th>
<th>name</th>
<th>age</th>
<th>other</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td colspan='2'>2</td>
<td>3</td>
</tr>
<tr>
<td>1</td>
<td colspan='2'>2</td>
<td>3</td>
</tr>
<tr>
<td>1</td>
<td colspan='2'>2</td>
<td>3</td>
</tr>
</tbody>
</table>


























id name age other
1 2 3
1 2 3
1 2 3

运算符优先级

发表于 2019-03-08 | 分类于 JavaScript

运算符优先级 运算符的优先级决定了表达式中运算执行的先后顺序,优先级高的运算符最先被执行。

问题:(row.FHSL || 0 - row.RKSL || 0) what?

1
2
3
4
(null || 0 - 2 || -3)
// -2
(null || 2 - 2 || -3)
// -3

reduce方法

发表于 2019-03-08 | 分类于 JavaScript

定义和用法

  • reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
  • reduce() 可以作为一个高阶函数,用于函数的 compose。
  • 注意: reduce() 对于空数组是不会执行回调函数的。
  • 语法:array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 数字值求和,例子1:
var numbers = [65, 44, 12, 4];
const getSum = (total, num) => {
return total + num;
}
const myFunction = (item) => {
document.getElementById("demo").innerHTML = numbers.reduce(getSum);
}

// 返回对象求和,例子2:
const func1 = (arr) => {
return arr.reduce((moneyObj, xsd) => {
return {
sumOfYZJE: moneyObj.sumOfYZJE + xsd.YZJE,
sumOfWLFY: moneyObj.sumOfWLFY + xsd.WLFY,
sumOfJJFY: moneyObj.sumOfJJFY + xsd.JJFY,
sumOfZKJE: moneyObj.sumOfZKJE + xsd.ZKJE,
sumOfZJE: moneyObj.sumOfZJE + xsd.ZJE,
sumOfWSZJE: moneyObj.sumOfWSZJE + xsd.WSZJE,
sumOfYSZJE: moneyObj.sumOfYSZJE + xsd.YSZJE,
sumOfWKPJE: moneyObj.sumOfWKPJE + xsd.WKPJE,
sumOfYKPJE: moneyObj.sumOfYKPJE + xsd.YKPJE,
sumOfHZJE: moneyObj.sumOfHZJE + xsd.HZJE
};
}, {sumOfYZJE: 0,sumOfWLFY: 0,sumOfJJFY: 0,sumOfZKJE: 0,sumOfZJE: 0, sumOfWSZJE: 0, sumOfYSZJE: 0, sumOfWKPJE: 0, sumOfYKPJE: 0, sumOfHZJE: 0});
};

ES6解构

发表于 2019-03-08 | 分类于 JavaScript

对象解构

1
2
3
4
5
6
7
const a = {id: 1, name: 'a1', age: 30};
const {id, ccc} = a;
const {name, ...ddd} = a;
console.log(id); // 1
console.log(ccc); // undefined
console.log(name); // a1
console.log(ddd); // {id: 1, age: 30}

数组解构

1
2
3
4
5
6
7
const b = [1, 3, 5, 7, 9];
const [, eee] = b;
const [, ...fff] = b;
const [, , ...ggg] = fff;
console.log(eee); // 3
console.log(fff); // [3, 5, 7, 9]
console.log(ggg); // [7, 9]
123
niexq

niexq

30 日志
8 分类
24 标签
GitHub E-Mail StackOverflow
友情链接
  • hexo
  • ruanyifeng
  • w3school
  • runoob
浙ICP备20011079号 © 2021 niexq
0%