深入浅出:了解字符串,数组和对象之间的方法和转换
一、字符串概念及常用的API方法:
字符串:凡是用双引号或单引号引起来的字符都叫做字符串
1、创建字符串的3种方法;
(1)、构造函数----》构造出来一个对象
var str = new String() 例子:var str = new String("我就是我,不一样的烟火,我看自己上火") console.log(str)
(2)、关键字
var str = String()
(3).字面量
var str = ""; var str = ''; var str = String("我就是我,不一样的烟火,我看自己上火") console.log(str) var str ="我就是我,不一样的烟火,我看自己上火"; console.log(str) 原字符串永远都不会被改变 var str = "你这一辈子有没有为别人拼过命?"; str[0] = "我"; console.log(str)
2.字符串常用的API:
(1)、charAt:输入下标返回相对应的值
str.charAt(下标) var str = "人前一杯酒,各自饮完。人后一片海,独立上岸"; console.log(str.charAt(3))
(2)、indexOf:输入值返回对应的下标 如果没有则返回-1
语法:str.indexOf() var str = "人前一杯酒,各自饮完。人后一片海,独立上岸"; console.log(str.indexOf("人"))
(3)、字符串截取:slice、substring、substr
slice:当输入一个值得时候是截取的起始位置 (算自身) slice、substring:当输入2个值得时候第一个值代表起始位置(算自身) 第二个值是结束位置(不算自身) substr:当输入2个值得时候第一个值代表起始位置(算自身) 第二个值代表截取的长度 例:var str = "人前一杯酒,各自饮完,人后一片海,独立上岸"; console.log(str.slice(2,6)) console.log(str.substring(2,6)) console.log(str.substr(2,6))
(4)、去掉前后空格:trim
例:var str = " 你好 "; var str1 = "再见" console.log(str) console.log(str1) console.log(str.trim())
(5)、split:将字符串转换为数组
(6)、replace():替换。第一参数是需要替换的字符 第二个参数是替换成的字符,返回值是新的字符串
var str = "人与人之间的安全距离是一百二十二公分,跟你喜欢的人在一起,你会努力去缩短这个距离"; var newStr = str.replace("人","神"); console.log(str) console.log(newStr)
(7)、将json字符串转json对象的方法:
例1、var obj =eval('('+ str +')'); 例2、var obj = str.parseJSON();//由JSON字符串转换为JSON对象 例3、var obj = JSON.parse(str);//由JSON字符串转换为JSON对象
二、数组常见的例题:
(1).让数组中的元素交换位置(重要) var arr = [10,20]; var temp = arr[0]; arr[0] = arr[1]; arr[1] = temp; console.log(arr) (2)、求数组的最大数和最小数(重要) var arr = [10,20,30,40,50]; //最大数 function maxNum(arr){ var max = arr[0]; for(var i=0;i<arr.length;i++){ if(max<arr[i]){ max = arr[i]; } } return max; } console.log(maxNum(arr))
1、数组常见的API:
(1)、push:尾部添加;返回值:是数组的长度(该方法会改变元素数组)
arr.push(); 例:var arr = [10,11,12,13]; var newArr = arr.push(14); console.log(newArr,arr);
(2)、unshift:头部添加; 返回值:是数组的长度( 该方法会改变元素原数组)
arr.unshift();
(3)、pop: 尾部删除;返回值:是删除的数字;(该方法会改变元素原数组)
arr.pop();
(4)、shift:头部删除;返回值:是删除的数字;( 该方法会改变元素原数组)
arr.shift();
(5)、sort():排序; 返回值:是排序好的数字;( 该方法会改变元素原数组)
arr.sort();
如果sort内部传递了参数的话那么就是按照数字的排序进行排序
如果sort内部没有传递参数的话则按照ASCII进行排序
var newArr = arr.sort(function(a,b){
return a-b;
});
var arr = [1,2,3,4,5,6];
var newArr = arr.sort(function(){
return Math.random()-0.5;
});
console.log(newArr,arr);
(6)、reverse():反转
var arrb = [1,2,3,4,5,6]; ar newArr = arrb.reverse(); console.log(arrb,newArr)
2.数组常见的API2:
(1)、concat:数组的拼接;返回值:拼接以后新的数组(原数组不会发生改变)
语法:arr.concat(第二个数组); 例: var arr = [1,2,3]; var arr1 = [4,5,6]; var newArr = arr.concat(arr1); console.log(newArr,arr,arr1)
(2)、join:将数组转换为字符串;( 原数组不会发生改变)
语法:arr.join("");参数:任意符号 把数组按照什么样子进行转换成字符串 例:var arr = [10,20,30,40]; var str = arr.join("/"); console.log(str,arr)
(3)、split:将字符串转换为数组 //字符串的方法
语法:str.split();参数:字符串里面自带的一些符号 或者你想要哪种符号进行分割 但是前提是字符串里面必须有这个符号 例:var str = "10,20,30,40"; var arr = str.split(","); var newArr = []; for(var i=0;i<arr.length;i++){ newArr.push(Number(arr[i])); } console.log(newArr)
(4)、toString:将数组转换为字符串;----->自己去查-----
语法:arr.toString(); var arr = [10,20,30,40]; var str = arr.toString(""); console.log(str,arr)
(5)、eval():传入一个字符串,然后将字符串解析成js代码去执行
(6)、slice:截取;(原数组不会发生改变)
语法:arr.slice() 当传入1个参数的时候这个参数代表截取的起始位置 当传入2个参数的时候第一个参数代表截取的起始位置但是不算自身 第二个参数代表截取结束的位置 例:var arr = [10,20,30,40,50,60,70,80,90,91,92,93,94]; var newArr = arr.slice(3,7); console.log(newArr,arr)
(7)、splice():截取;( 原数组会发生改变)
语法:arr.splice(); 当传入1个值得时候这个值代表截取的起始位置(不算自身) 当传入2个值得时候第一个值代表截取起始的位置第二个值代表截取的长度 当传入三个值得时候,如果第二个值是0的话代表的插入 第一个值代码插入的位置,第三个值插入的数字 当传入三个值得时候,如果第二个值是非0的数字的数代表替换,第一个值是插入的位置,第三个值是插入的数字,第二个值还代表替换的长度 例:var arr = [10,20,30,40,50,60,70,80,90,91,92,93,94]; var newArr = arr.splice(3,3,"你好"); console.log(newArr,arr)
3.什么是伪数组,如何将伪数组转化为标准数组
这里把符合以下条件的对象称为伪数组:
1,具有length属性
2,按索引方式存储数据
3,不具有数组的push,pop等方法
伪数组(类数组):无法直接调用数组方法或期望length属性有什么特殊的行为,不具有数组的push,pop等方法,但仍可以对真正数组遍历方法来遍历它们。典型的是函数的argument参数,还有像调用document.getElementsByTagName, document.childNodes之类 的,它们返回的NodeList对象都属于伪数组。
可以使用以下函数将伪数组转化为真正的Array对象(兼容问题处理)。
function makeArray(c) { try { return Array.prototype.slice.call(c); } catch (e) { var ret = [], i, len = c.length; for (i = 0; i < len; i++) { ret[i] = (c[i]); } return ret; } }
三、对象:
什么是一个对象?万物皆是对象 对象作用:存储信息、命名空间 三种方法: 1、构造函数 var obj = new Object();是一个Object 2、关键字 var obj = Object();返回值{} 3、字面量 var obj = {}:返回值{} var obj = new Object(); var obj1 = Object(); var obj2 = {}; console.log(obj2) 如果一个变量当做属性的话 那么这个属性是只属于这个对象的(婚前是属于大家的 婚后是属于自己的) //添加数据 属性:key值 ; 属性值:val ;obj.key = val; var obj = {a:3}//数据的类型是key:val 可以存放多个键值对 每个之间用逗号隔开 obj.name = "唐文"; obj.sex = "不详"; obj.age //上面这个值永远都是key值 //下面这个值可以是一个变量 如果加""则是属性 不加引号则是变量 var name = "bbbb"; obj[name] = 333; //删除 delete obj.name //添加方法 obj.fn = function() { alert(1) } console.log(sex)
JSON对象转字符串
var last=obj.toJSONString(); //将JSON对象转化为JSON字符 var last=JSON.stringify(obj); //将JSON对象转化为JSON字符
对象常用
1.获取对象key值得常用方法,hasOwnProperty,
var jsonObject1 = { "name": "xiaoming", "age": 29 }, var keys1 = []; for (var p1 in jsonObject1) { if (jsonObject1.hasOwnProperty(p1)) keys1.push(p1); } alert(keys1);
2.如果不使用 hasOwnProperty,给Object 添加自己的属性时,也会输出出来
Object.prototype.test = "I am test"; var jsonObject = { "name": "xiaoming", "age": 29 }, keys = []; for (var p in jsonObject) keys.push(p); alert(keys); //name,age, test
3.ES6获取key:Object.getOwnPropertyNames
var obj={a:1,b:2}; Object.getOwnPropertyNames(obj)
4.获取数组对象的key和值
arr.forEach((v,i)=>{ Object.keys(v).forEach(v=>{ console.log(v)//取到了key console.log(arr[i][v])//取到了值 }) })
(2)let keyarr = Object.keys(obj).sort;//es6获取对象的key值