这里会收录一下遇到的,或者解决问题的方法。不断收集,不断壮大。
开发小锦囊
JavaScript
1、js 判断字符串中是否包含某个字符串
String对象的方法
方法一: indexOf() (推荐)
1 | var str = "123"; |
方法二: search()
1 | var str = "123"; |
方法三:match()
1 | var str = "123"; |
RegExp 对象方法
方法四:test()
1 | var str = "123"; |
方法五:exec()
1 | var str = "123"; |
2、 JS中every()和some()的用法
every()与some()方法都是JS中数组的迭代方法。
every()是对数组中每一项运行给定函数,如果该函数对每一项返回true,则返回true。
some()是对数组中每一项运行给定函数,如果该函数对任一项返回true,则返回true。
1 | var arr = [ 1, 2, 3, 4, 5, 6 ]; |
3、 用Set为数组去重
1 | var arr = [1,2,2,3,4] // 需要去重的数组 |
4、 删除数组尾部元素
一个简单的用来清空或则删除数组尾部元素的简单方法就是改变数组的length属性值。1
2
3
4
5
6
7
8const 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
2const 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
9unction 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
20const 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 | (1)纯JSON文本可以这样 |
9、随机生成验证码
1 |
|
React篇
1、 关于this.setState更新的问题
this.setState是异步,所以在this.setState之后立即调用this.state是获取不到最新的数据的,那么怎么获取最新的数据呢?下面介绍三个方法:
1.回调函数callback1
2
3
4
5this.setState({
val: this.state.val+1
}, () => {
console.log(this.state.val)
});
2.componentDidUpdate
1 | componentDidUpdate(){ |
在this.setState之后去componentDidUpdate函数中调用,此时的this.state已经更新
3.将this.setState放入setTimeout函数中1
2
3
4
5
6
7let 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有一个参数指定判断的位置,但是默认为空.意思是判断整个字符串.缺点是对中文的支持不好.
实例11
2
3
4
5if(strpos('www.jb51.net','jb51') !== false){
echo '包含jb51';
}else{
echo '不包含jb51';
}
实例21
2
3$str= 'abc';
$needle= 'a';
$pos = strpos($str, $needle); // 返回第一次找到改字符串的位置,这里返回为1,若查不到则返回False
4. explode
用explode进行判断PHP判断字符串的包含代码如下:1
2
3
4
5
6
7
8
9function checkstr($str){
$needle ='a';//判断是否包含a这个字符
$tmparray = explode($needle,$str);
if(count($tmparray)>1){
return true;
} else{
return false;
}
}
5、substr例如我们需要判断最后一个字符是不是制定字符
1 | <?php |
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
12function check_str($str, $substr)
{
$nums=substr_count($str,$substr);
if ($nums>=1)
{
return true;
}
else
{
return false;
}
}
php中数组和字符串的相互转换
数组转字符串:1
implode('!', $arr);//将一维数组以!分隔组合成一个字符串,参数一可以为""
字符串转数组:1
2
3explode('!', $str);//将字符串以!分割为一个一维数组,参数一不可以为""
str_split($str, 3);//将字符串分割成数组,参数二将字符串从左向右每3个字符分割一次,最后的不够3个了 有几个算几个。
php的strpos() 函数判断字符串中是否包含某字符串的方法
判断某字符串中是否包含某字符串的方法1
2
3
4
5if(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
51、使用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是按字节来切分字符,但是都不会产生半个字符的现象。