04-数组字符串11-20

console.log("第十一题")

/*------------封装函数 删除数组中的假值----------------*/
/* 1.那肯定是布尔值,用到if,删除数组的时候会导致数组坍塌
2. i--解决塌陷问题

[7, "ate", "", false, 9]
i=2 arr[2] --> arr.splice(2,1) [7, "ate", false, 9]
i++ i-->3 arr[3] arr.splice(3,1) 轮到了9,所以删了后比原来的少了一项
数组坍塌:因为数组的某一项被删除了,而i还在继续增加
导致在循环时 跳过数组中的某一项
*/

function bouncer(arr) {
for(var i=0;i<arr.length;i++){
if(!arr[i]){ //隐式转换,如果是假值
arr.splice(i,1) //删除数组的第i项
i--; //因为删除会改变原来函数的长度,所以会导致函数坍塌,所以i--
}
}
return arr;
}
console.log(bouncer([7, "ate", "", false, 9])) //[7,"ate",9]



console.log("第十二题")
/*----比较字符串,如果第一个字符串中包含了第二个字符串的所有字母,则返回true,否则返回false---*/
// 1.遍历第二个字符串 遍历就是for循环
// 2.看看第一个字符串中有没有包括第二个字符串的某一个字符

function compare(arr) {
for(var i=0;i<arr[1].length;i++){
if(arr[0].indexOf(arr[1][i])===-1){
/*判断arr[0]里面有没有arr[1][i]
如果是-1
arr[0]里面就没有arr[1][i]
如果不是-1
arr[0]里面就有arr[1][i]
*/
return false;
}
}
return true;
}
console.log(compare(["hello", "heo"])) //true
console.log(compare(["hello", "neo"])) //false

console.log("第十三题")
/*-------封装函数 用指定字符串替换字符串的----封装自己的函数,不用原生的----*/
/*
replaceStr('l am heaven heaven heaven','heaven','six')
--> 'l am six heaven heaven'
replaceStr('l am six heaven heaven','heaven','six')
--> 'l am six six heaven'
replaceStr('l am six six heaven','heaven','six')
-->l am six six six'
*/

function replaceStr(str,origin,target){
if(str.indexOf(origin)===-1){ //如果没有找到指定的字符时,返回是 -1,
return str; //结果被抛出 //如果最终的str中不存在origin 则替换完成 返回str
}
/*
str: 'i am heaven'
origin:'heaven'
target:'six'
*/
// return str.replace(origin,target).replace(origin,target)
//有点像递归,所以用递归的方法做,要找出口
return replaceStr(str.replace(origin,target),origin,target)
}
console.log(replaceStr('l am heaven heaven','heaven','six')) // 'l am six six'



console.log("第十四题")
/*-----------------实现push方法-------------------*/
//var arr=[1,23,3]
//function myPush(newArr,a){
// newArr[newArr.length]=a;
// return newArr;
//}
//console.log(myPush(arr)) //这样的话只能添加一个数据
//要使用argument不定参实参列表

var arr=[1,23,3]
function myPush(newArr){
for(var i=1;i<arguments.length;i++){
newArr[newArr.length] = arguments[i];
}
return newArr;
}
console.log(myPush(arr,'ora'))


console.log("第十五题")
/*----------封装函数 获取字符串中的数字,并按照数组输出-------------*/
/* 1.把所有的字母都替换成统一的字符!数字不变
2.判断是不是不正常的数字,是就true,把他们变成*号
3.字符串类的取代不会变原来点的值,所以要给他赋值
4.定义一个数组吧他们分开
*/
function returnArr(str){
for(var i=0;i<str.length;i++){
if(isNaN(str[i])){
str = str.replace(str[i],'*');
}
}
var arr = str.split('*')
for(var i=0;i<arr.length;i++){
if(arr[i]){ //如果arr[i]是真 就是数字
arr[i] = +arr[i]
}else{ //如果arr[i]是真 就是空串,删除字符串,删除导致数组坍塌
arr.splice(i,1);
i--;
}
}
return arr;
}
console.log(returnArr('sdau1234skjbeari5665dklsjo2121'))



console.log("第十六题")
/*---------封装函数 查找出第一个只出现一次的字符---------*/
/* 1. indexOf()和lastIndexOf()配合使用,
如果从左向右看和从右向左看的索引是相同的,则该字符只出现一次
则把该值抛出
*/

function unquie(str){
for(var i=0;i<str.length;i++){
if(str.indexOf(str[i])==str.lastIndexOf(str[i])){
return str[i];
}
}
}
console.log(unquie("heavnh"))   //"e"



console.log("第十七题")
/*---------封装函数 实现字符串去重 ---------*/

function deweightStr(str){
var arr = str.split(""); //我们只学过数组的删除,没有学过字符串的删除,所以要转化为数组
for(var i=0;i<arr.length;i++){
if(arr.indexOf(arr[i])!=arr.lastIndexOf(arr[i])){ //字符重复,则删除
arr.splice(i,1) //从左向右,一旦牵涉删除,则会导致数组坍塌 i--解决
//arr.splice(arr.lastIndexOf(arr[i]),1) //从右向左
i--;
}
}
return arr.join('');
}
console.log(deweightStr("heaven"))  //'heavn'


//方法二
/* 1.声明newStr空串
2.遍历字符串heaven
3.如果newStr里面没有str[i]
*/
function deweightStr(str){
var newStr='';
for(var i=0;i<str.length;i++){
if(newStr.indexOf(str[i])===-1){ //如果newStr里面没有str[i]
newStr+=str[i];
}
}
return newStr;
}
console.log(deweightStr("heaven"))

//方法三
/*
使用str.split函数把str变成数组
遍历数组 获取arr.slice(i+1),把拿出的后面的数组与第一个数组比较
判断arr.slice(i+1)里面有没有arr[i] 如果有 就删除arr[i]
*/

function deweightStr(str){
var arr = str.split('');//把str变成数组
for(var i=0;i<arr.length;i++){
if(arr.slice(i+1).indexOf(arr[i])!=-1){ //如果arr.slice(i+1)里面有arr[i]那就删除arr[i]
arr.splice(i,1);
i--;
}
}
return arr.join('')
}
console.log(deweightStr("heaven"))



console.log("第十九题")
/*----------封装函数 输出指定字符串的长度-------------*/
/* 1. 一个中文占2个字节,一个英文占一个字节
         2.如果Unicode编码值小于等于255是英文,如果unicode编码值大于255是中文

*/
function byteLen(str){
var length = 0; //存储的字节数目
for(var i=0;i<str.length;i++){
var charCode = str.charCodeAt(i); //获取每个字符的Unicode码
if(charCode<=255){ //如果是英文
length++;
}else{
length+=2;
}
}
return length;
}
console.log(byteLen('heaven啊橙'))


console.log("第二十题")
/*---------获取浏览器url中的数据,要求:函数返回值是一个对象-----------*/

function getUrl(str){
var arr = str.split('?')[1].split('&') //分割字符串
var obj={}
for(var i=0;i<arr.length;i++){
var newArr = arr[i].split('=');
//console.log(newArr)
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=海文&rsv_pq=b

ecd1331000082fd&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'

console.log(getUrl(url)['wd'])
//getUrl(url)['ie']

posted @ 2019-07-01 10:09  小小oRa  阅读(159)  评论(0)    收藏  举报