js: 数组截取、合并+对象拷贝+JSON格式转换
作者:互联网
1、递归简单来说 就是函数自己调自己,但是要加限制条件,不然会成为一个死循环。
1 <div> 2 <input type="text" v-model="sum"><button>输出</button> 3 <span></span> 4 </div> 5 <!-- 递归 --> 6 <script> 7 let btn=document.querySelector('button'); 8 let span=document.querySelector('span'); 9 let inp=document.querySelector('input'); 10 11 btn.onclick=function(){ 12 console.log(inp.value); 13 let sum=fun(inp.value); 14 span.innerHTML=sum; 15 } 16 let fun= function(n){ 17 if(n===1){ 18 return sum=n; 19 }else{ 20 return sum=n * fun(n-1) 21 } 22 } 23 24 </script>
2、JSON格式字符串 和 对象等之间的转换
JSON --> Object 用 JSON.parse()
Object --> JSON 用 JSON.stringify()
/* 数据类型之间的转换 js的数据类型有:sring,number,undefined,null,boolean, 数组 arry, 对象 object, 日期格式 date */ let a='this is a cat'; let arr=[5,8,111]; let obj={ name:'张三', age:18, like:{ eat:'肉', food:'rice', } }; let JSON1='{"name":"李四","age":18,"arry1":["丽丽","18","abc"]}'; // 转成JSON格式 console.log(a,JSON.stringify(a)); console.log(arr,JSON.stringify(arr)); console.log(obj,JSON.stringify(obj)); //JSON格式 转换成对象 //JSON格式的数据其实是 键值对形式的字符串 :1、JSON中没有undefined,2、JSON中的字符串必须使用双引号,3、JSON中是不能用注释的 console.log(JSON1,JSON.parse(JSON1));
3、数组的截取 splice 和 slice
//1、splice 数组的截取 let arry2=[1,2,3,4,5,6,7,8,9,10,11,12,13,14]; //splice 截取数组,参数是index,(从第几个元素开始,截取几个元素),数组是从0开始的。 //splice截取之后,原数组中被截取的元素就没有了,改变了原有数组 let new2= arry2.splice(1,4); //从第一个元素开始,截取四个元素,组成新的数组 console.log('从Index=1截取,往后截取四个',new2); console.log(arry2)//数组中的 2,3,4 被删除 //只传一个参数 3,表示截取前3个元素 let new3=arry2.splice(6); //只传一个元素表示从 index=6 开始往后截取到数组结束 console.log('从index=6开始截取',new3) console.log(arry2) let new4=arry2.splice(-3);//从倒数第三个截取,往后截取到结束。 console.log('向后截取',new4); console.log(arry2);
//2、slice 不改变原数组 其他的和splice一样 ; 另外 slice 属于拷贝 let arry3=[11,22,33,54,5,'a',7,8,'张三',9,10,'11',12,'13',14]; let new5=arry3.slice(1,4); let new6=arry3.slice(4); let new7=arry3.slice(-4);console.log('new7',new7); console.log(arry3); console.log(new5); console.log(new6); arry3.push('Lili'); console.log(arry3); console.log('new7',new7)
//slice 也属于拷贝,即使之后array3发生了变化,不会影响到 new7的值,slice 生成的数组 new7属于一个独立的新的数组
4、数组的合并 concat() array.push() / array.push.apply()
//两个数组合并 var array1=['张三','新新','莲莲'] var array2=['a','b','c','d','e','f','g'] var a = array1; console.log('a',a) var c=array1.concat(array2); //1、concat 返回新的数组,不改变原来数组的元素 console.log(array1); console.log(array2); console.log(c); // 2、在使用push的时候,注意把原来的数组备份。 //array.push + for循环 遍历数组,可以筛选符合条件的元素,但是改变原来的数组 for(let i=0;i<array2.length;i++){ array1.push(array2[i]) } console.log(array1); //合并某个元素 array.push() array1.push(array2[1]); console.log(array1) array1.push('大学') console.log(array1); // 合并多个数组到其中一个里面 array1.push.apply(array1,array2); console.log(array1); // a在最开始的时候等于 array1的最初值,但是后面array1因为合并,发生了变化,a也发生了变化,不在是初始值,是变化之后的值。 console.log(a);console.log('c',c);//但是c没有变化,concat属于拷贝,即使之后 array1 和array2发生了变化,也不会影响 concat 生成的新数组,concat返回的是一个新的独立的数组。
5、递归实现: 对象的浅拷贝 与 对象深拷贝
(浅拷贝数组:还可以通过 数组合并,数组截取的形式)
<!-- 递归实现深拷贝: 阶乘,累加 --> <script> const student1 = { name: '张三', age: 30, parent: { mom: '丽丽', dad: '张老三' }, hobit: ['羽毛球', '篮球'] } //1、浅拷贝函数 function copy(obj) { let newObj = {}; for (let i in obj) { newObj[i] = obj[i] } return newObj; } //调用函数,对student1进行拷贝 const student2 = copy(student1); student1.name = '张三丰'; student1.parent.dad = '老张三丰'; student1.hobit.push('乒乓球'); //浅拷贝,拷贝之后的student1.name不会随着原数据变化而变化; 但是 parent对象或者hobit 数组里面的值还是会随着 student1变化,达不到想要的拷贝目的。 console.log(student1); console.log(student2);//2、深度拷贝
function copy(obj) { let newObj = {}; for (let i in obj) { //对里面的对象再拷贝一次 if (obj[i] instanceof Object) { newObj[i]=copy(obj[i]) } else { newObj[i] = obj[i] } } return newObj; } //调用函数,对student1进行拷贝 const student2 = copy(student1); student1.name = '张三丰'; student1.parent.dad = '老张三丰'; student1.hobit.push('乒乓球'); console.log(student1); console.log(student2);
标签:console,log,截取,js,JSON,let,数组,student1 来源: https://www.cnblogs.com/lianna/p/16383663.html