js字符串方法练习----下
各种api,很容易混淆,希望大家找到合适的适合自己的方法快速记忆!!!
<script>
// 11、封装函数 删除数组中的假值 例如:输入bouncer([7, "ate", "", false, 9]); 返回[7,"ate",9]
// 假值:undefind null "" false 0 NaN
function bouncer(arr) {
// 获取数组长度
var len = arr.length;
// 从后往前遍历数组中每一项,从前往后如果假值被截取下标会发生改变,造成不不要的麻烦
for (var i = len - 1; i >= 0; i--) {
// 判断是不是假值,是截取
if (!arr[i]) {
arr.splice(i, 1) // splice会改变原数组
}
}
return arr;
}
console.log(bouncer([7, "ate", "", false, 9]));
// 12、比较字符串,如果第一个字符串中包含了第二个字符串的所有字母,则返回`true`,否则返回`false
// 例如:输入compare(["hello", "heo"]); 返回true
function compare(arr) {
var len = arr[1].length; // 获取数组第二项值的长度
// 遍历数组第二项的值,取出每个字母
for (var i = 0; i < len; i++) {
// 在数组中第一项查找
if (arr[0].indexOf(arr[1][i]) == -1) { // 如果在数组第一项中查不到第二项的某一个字母,返回false
return false;
}
}
return true; // 如果跑到这一步,则说明有查找到,返回true
}
console.log(compare(["hello", "heo"]));
// 13、封装函数 用指定字符串替换字符串的 例如:输入replaceStr('l am anyan anyan anyan','anyan','sixsixsixx')
function replaceStr(str, origin, target) {
if (str.indexOf(origin) == -1) return str; // 如果在字符串中查找不到制定的字符串直接return
// 使用回调函数,防止在字符串中查找处多个结果
return replaceStr(str.replace(origin, target), origin, target)
}
var x = replaceStr('l am anyan anyan anyan', 'anyan', 'sixsixsixx');
console.log(x);
// 14、封装函数 实现push方法 原数组
function myPush() {
// 通过遍历
for (var i = 1; i < arguments.length; i++) {
arguments[0][arguments[0].length] = arguments[i]
}
return arr
}
var arr = [1, 2, 3];
var newArr = myPush(arr, 44, 66, 77);
console.log(newArr);
// 15、封装函数 获取字符串中的数字,并按照数组输出 例如:输入returnArr('shdkfh1234cxj5665sdkj2121') 返回[1234,5665,2121]
function returnArr(str) {
var arr = [];
var len = str.length;
// 编码数字
var num = 0,
num2 = 0;
var a = 0,
b = 0;
iterPoint: for (var i = 0; i < len; i++) {
num = str.charCodeAt(i); // 获取字符编码
a = i //根据编码判断是不是数字
if (48 <= num && num <= 57) {
// 为true表示字符是数字
// 内层循环查询数字结束的索引
for (var j = i; j < len; j++) {
num2 = str.charCodeAt(j);
// 判断编码不是数字的索引才是结束的位置
if (!(48 <= num2 && num2 <= 57) || j == len - 1) {
b = (j == len - 1) ? (j + 1) : j;
// 为true 表示不是数字
arr.push(str.slice(a, b));
// 下一次执行外层循环的时候从j的位置开始
i = j;
continue iterPoint;
}
}
}
// false 表示字符串不是数字
}
return arr;
}
console.log(returnArr('shdkfh1234cxj5665sdkj2121'));
// 16、封装函数 查找出第一个只出现一次的字符 例如unquie("wuwei"); 返回"u"
function unquie(str) {
var len = str.length;
// 遍历字符串中的每一项,
for (var i = 0; i < len; i++) {
var char = str[i];
// 从两头开始查找,如果相等则说明下标一致,则为第一次出现的字符
if (str.indexOf(char) == str.lastIndexOf(char)) {
return str[i];
}
}
}
//
console.log(unquie("我叫安雁,你呢?我叫猪"));
// 17、封装函数 实现字符串去重 例如:输入deweightStr("anyan"); 返回'any'
function deweightStr(str) {
var len = str.length;
for (var i = 0; i < len; i++) {
var char = str[i];
if (str.indexOf(char) !== str.lastIndexOf(char)) {
str = str.replace(char, "");
i--;
}
}
return str;
}
console.log(deweightStr("anyan"));
// 18、封装函数 输出指定字符串的长度:提示:1. 一个中文占2个字节,一个英文占一个字节
// 2.如果Unicode编码值小于等于255是英文,如果unicode编码值大于255是中文
function byteLen(str) {
var len = str.length; // 1、获取字符串长度
var num = 0; // 2、定义变量接受长度
// 3、遍历获取每个字符的字节
for (var i = 0; i < len; i++) {
str.charCodeAt(i) <= 255 ? num += 1 : num += 2;
}
return num;
}
console.log(byteLen("今天是2019年10月28日"));
// 19、封装函数 获取浏览器url中的数据 要求:函数返回值是一个对象
// 示例地址:https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&tn=baidu&wd=wuwwei
// &rsv_pq=becd1331000082fd&rsv_t=0f84&rqlang=cn&rsv_enter=1&rsv_sug3=14&rsv_sug1=12&rsv_sug7=100&rsv_sug2=0&rsp=0&inputT=9344&rsv_sug4=3518432
// 例如:输入getUrl(url)['wd']; 返回"anyan"
function getUrl(url) {
var obj = {};
var str = url.split('?')[1]
var arr = str ? str.split('&') : []
var newArr = []
for (var i = 0; i < arr.length; i++) {
newArr = arr[i].split('=')
obj[newArr[0]] = newArr[1]
}
return obj;
}
var url = "https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&tn=baidu&wd=anyan&rsv_pq=becd1331000082fd&rsv_t=0f84&rqlang=cn&rsv_enter=1&rsv_sug3=14&rsv_sug1=12&rsv_sug7=100&rsv_sug2=0&rsp=0&inputT=9344&rsv_sug4=3518432"
var obj = getUrl(url)['wd']
console.log(obj)
</script>

浙公网安备 33010602011771号