Fork me on GitHub

开发小锦囊

这里会收录一下遇到的,或者解决问题的方法。不断收集,不断壮大。
js

开发小锦囊

JavaScript

1、js 判断字符串中是否包含某个字符串

String对象的方法

方法一: indexOf() (推荐)

1
2
3
var str = "123";
console.log(str.indexOf("3") != -1 ); // true
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。如果要检索的字符串值没有出现,则该方法返回 -1

方法二: search()

1
2
3
var str = "123";
console.log(str.search("3") != -1 ); // true
search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。如果没有找到任何匹配的子串,则返回 -1

方法三:match()

1
2
3
4
5
6
var str = "123";
var reg = RegExp(/3/);
if(str.match(reg)){
// 包含
}
match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。

RegExp 对象方法

方法四:test()

1
2
3
4
var str = "123";
var reg = RegExp(/3/);
console.log(reg.test(str)); // true
test() 方法用于检索字符串中指定的值。返回 truefalse

方法五:exec()

1
2
3
4
5
6
var str = "123";
var reg = RegExp(/3/);
if(reg.exec(str)){
// 包含
}
exec() 方法用于检索字符串中的正则表达式的匹配。返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。

2、 JS中every()和some()的用法

every()与some()方法都是JS中数组的迭代方法。

every()是对数组中每一项运行给定函数,如果该函数对每一项返回true,则返回true。

some()是对数组中每一项运行给定函数,如果该函数对任一项返回true,则返回true。

1
2
3
4
5
6
7
8
9
10
11
var arr = [ 1, 2, 3, 4, 5, 6 ]; 

console.log( arr.some( function( item, index, array ){
console.log( 'item=' + item + ',index='+index+',array='+array );
return item > 3;
}));

console.log( arr.every( function( item, index, array ){
console.log( 'item=' + item + ',index='+index+',array='+array );
return item > 3;
}));

3、 用Set为数组去重

1
2
3
4
5
6
var arr = [1,2,2,3,4] // 需要去重的数组

var set = new Set(arr) // {1,2,3,4}
var newArr = Array.from(set) // 再把set转变成array

console.log(newArr) // [1,2,3,4]

4、 删除数组尾部元素

一个简单的用来清空或则删除数组尾部元素的简单方法就是改变数组的length属性值。

1
2
3
4
5
6
7
8
const arr = [11, 22, 33, 44, 55, 66];
// truncanting
arr.length = 3;
console.log(arr); //=> [11, 22, 33]
// clearing
arr.length = 0;
console.log(arr); //=> []
console.log(arr[2]); //=> undefined

5、 平铺多维数组

使用Spread操作,可以很容易去平铺嵌套多维数组:

1
2
const arr = [11, [22, 33], [44, 55], 66];
const flatArr = [].concat(...arr); //=> [11, 22, 33, 44, 55, 66]

可惜,上面的方法仅仅适用于二维数组。不过,通过递归,我们可以平铺任意维度的嵌套数组。

1
2
3
4
5
6
7
8
9
unction flattenArray(arr) {
const flattened = [].concat(...arr);
return flattened.some(item => Array.isArray(item)) ?
flattenArray(flattened) : flattened;
}

const arr = [11, [22, 33], [44, [55, 66, [77, [88]], 99]]];
const flatArr = flattenArray(arr);
//=> [11, 22, 33, 44, 55, 66, 77, 88, 99]

6、 格式化JSON代码

JSON.stringify不止可以将一个对象字符化,还可以格式化输出JSON对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const obj = { 
foo: { bar: [11, 22, 33, 44], baz: { bing: true, boom: 'Hello' } }
};
// The third parameter is the number of spaces used to
// beautify the JSON output.
JSON.stringify(obj, null, 4);
// =>"{
// => "foo": {
// => "bar": [
// => 11,
// => 22,
// => 33,
// => 44
// => ],
// => "baz": {
// => "bing": true,
// => "boom": "Hello"
// => }
// => }
// =>}"

7、 await多个async函数

在使用async/await的时候,可以使用Promise.all来await多个async函数。

1
await Promise.all([anAsyncCall(), thisIsAlsoAsync(), oneMore()])

8、JSON对象和JSON数组添加删除元素

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
1)纯JSON文本可以这样
var json={
id:"id1",
name:"开心"
};

//添加
json["gender"]="男"
json["age"]=26;
alert(json.age);

//删除
delete json["age"];
alert(json.age);
alert(json.gender);


正常对象的删除:
var o = new Object;
o.name = "David";
alert(o.name); //输出 "David"
delete o.name;
alert(o.name); //输出 "undefined"


2纯json对象的话就把以上的var json先json1 = JSON.parse(json)就可以了

3)如果用JSON数组文本的话可以这样


var mainArray = [
{"tag" :"任务","num":2},
{"tag" :"工作" ,"num":6}
];

mainArray .push({
"tag":"开会","num":3
});


mainArray.shift();//删除数组头元素
mainArray.pop();//删除数组尾元素


----------------------由object创建json文本格式的方法----------------------

<p id="a">ssss</p>
<script>
var data = new Object();
data.name = "airuikun";
data.sex = "man";
var s = JSON.stringify(data);
document.getElementById("a").innerHTML = s;
</script>

9、随机生成验证码

1
2
3
4
5
6
7
8
9

var str=Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);


// 结果如下

=> 8a51


React篇


1、 关于this.setState更新的问题

this.setState是异步,所以在this.setState之后立即调用this.state是获取不到最新的数据的,那么怎么获取最新的数据呢?下面介绍三个方法:

1.回调函数callback

1
2
3
4
5
this.setState({
val: this.state.val+1
}, () => {
console.log(this.state.val)
});

2.componentDidUpdate

1
2
3
componentDidUpdate(){
console.log(this.state.val);
}

在this.setState之后去componentDidUpdate函数中调用,此时的this.state已经更新

3.将this.setState放入setTimeout函数中

1
2
3
4
5
6
7
let self = this;
setTimeout(function () {
self.setState({
val:self.state.val+1
});
console.log(self.state.val);
})

在setTimeout函数中,在this.setState之后this.state是立即更新的,所以也可以获取到更新后的数据。



PHP篇

php 字符串中是否包含指定字符串的多种方法

1. strstr

strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。
该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。

代码如下:

1
2
3
4
5
6
7
<?php
/*如手册上的举例*/
$email = 'user@example.com';
$domain = strstr($email, '@');
echo $domain;
// prints @example.com
?>

2. stristr

stristr() 函数查找字符串在另一个字符串中第一次出现的位置。
如果成功,则返回字符串的其余部分(从匹配点)。如果没有找到该字符串,则返回 false。

它和strstr的使用方法完全一样.唯一的区别是stristr不区分大小写.

3. strpos

strpos函数返回boolean值.FALSE和TRUE不用多说.用 “===”进行判断.strpos在执行速度上都比以上两个函数快,另外strpos有一个参数指定判断的位置,但是默认为空.意思是判断整个字符串.缺点是对中文的支持不好.

实例1

1
2
3
4
5
if(strpos('www.jb51.net','jb51') !== false){ 
echo '包含jb51';
}else{
echo '不包含jb51';
}

实例2

1
2
3
$str= 'abc';
$needle= 'a';
$pos = strpos($str, $needle); // 返回第一次找到改字符串的位置,这里返回为1,若查不到则返回False

4. explode

用explode进行判断PHP判断字符串的包含代码如下:

1
2
3
4
5
6
7
8
9
function checkstr($str){
$needle ='a';//判断是否包含a这个字符
$tmparray = explode($needle,$str);
if(count($tmparray)>1){
return true;
} else{
return false;
}
}

5、substr例如我们需要判断最后一个字符是不是制定字符

1
2
3
4
5
6
<?php
/*
$str1="<p>这是个winrar专用的dll然后下哦啊不错的dll文件,QlogWin32.dll</p>";
if(substr($str1,-8)==".dll</p>"){
echo substr($str1,0,-4);
}

6、substr_count统计“子字符串”在“原始字符串中出现的次数”

substr_count()函数本是一个小字符串在一个大字符串中出现的次数:
$number = substr_count(big_string, small_string);
正好今天需要一个查找字符串的函数,要实现判断字符串big_string是否包含字符串small_string,返回true或fasle;

查了半天手册没有找到现成的函数,于是想到可以用substr_count函数来实现代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
function check_str($str, $substr)
{
$nums=substr_count($str,$substr);
if ($nums>=1)
{
return true;
}
else
{
return false;
}
}


php中数组和字符串的相互转换

数组转字符串:

1
implode('!', $arr);//将一维数组以!分隔组合成一个字符串,参数一可以为""

字符串转数组:

1
2
3
explode('!', $str);//将字符串以!分割为一个一维数组,参数一不可以为""

str_split($str, 3);//将字符串分割成数组,参数二将字符串从左向右每3个字符分割一次,最后的不够3个了 有几个算几个。


php的strpos() 函数判断字符串中是否包含某字符串的方法

判断某字符串中是否包含某字符串的方法

1
2
3
4
5
if(strpos('www.idc-gz.com','idc-gz') !== false){
echo '包含';
}else{
echo '不包含';
}


PHP中实现中文字串截取无乱码的方法

在PHP中,substr()函数截取带有中文字符串的话,可能会出现乱码,这是因为中西文一个字节所占有的字节数不一样,而substr的长度参数是按照字节去算的,在GB2312编码时,一个中文占2个字节,英文为1个字节,而在UTF-8编码当中,一个中文可能占有2个或3个字节,英文或半角标点占1字节。

直接使用PHP函数substr截取中文字符可能会出现乱码,主要是substr可能硬生生的将一个中文字符“锯”成两半。解决办法:

1
2
3
4
5
1、使用mbstring扩展库的mb_substr截取就不会出现乱码了。

2、自己书写截取函数,但效率不如用mbstring扩展库来得高。

3、如果仅是为了输出截取的串,可用如下方式实现:substr($str, 0, 30).chr(0)。

substr()函数可以分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用mb_substr()/mb_strcut这个函数,mb_substr()/mb_strcut的用法与substr()相似,只是在mb_substr()/mb_strcut最后要加入多一个参数,以设定字符串的编码,但是一般的服务器都没打开php_mbstring.dll,需要在php.ini在把php_mbstring.dll打开。
举个例子:

1
2
3
4
5
6
7
8
9
<?php
echo mb_substr('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8');
?>
输出:这样一来我的字
<?php
echo mb_strcut('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8');
?>
输出:这样一
从上面的例子可以看出,mb_substr是按字来切分字符,而mb_strcut是按字节来切分字符,但是都不会产生半个字符的现象。


本文标题:开发小锦囊

文章作者:DRLong

发布时间:2018年07月30日 - 00:07

原始链接:https://duanruilong.github.io/2018/07/30/开发小锦囊/ 复制文章链接==>

-------------我是一条分割线感谢您的阅读-------------
DRLong WeChat Pay

微信打赏

DRLong Alipay

支付宝打赏