Blogger Information
Blog 37
fans 1
comment 0
visits 32732
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
JS中常用的数组函数JSON函数和跨域问题解决方案
Jason Pu?
Original
882 people have browsed it

一:常用数组函数

1.join(“分隔符”)将数组的元素转成一个字符串,原来的数组会保留

  1. let arr1 = ["2021","1","9"];
  2. console.log(arr1.join("-"));//2021-1-9

2.Array.from()将伪数组转成数组,只要有length属性的就可以转成数组。

  1. let string1 = "abcdefg";
  2. console.log(Array.from(string1));//[ "a", "b", "c", "d", "e", "f", "g" ]

3.pop() 数组末尾移除最后一项,减少数组的 length 值,然后返回移除的元素。
pop()会直接修改原数组,而不是创建一个新的数组

  1. let arr2 = [1,2,3,4,5];
  2. let popa= arr2.pop();
  3. console.log(arr2,"被删除者:"+popa);//[ 1, 2, 3, 4 ] 被删除者:5

4.push() 用于向数组的末尾添加一个或多个元素,并返回修改后数组的长度(数值类型)。
push()会直接修改原数组,而不是创建一个新的数组

  1. let arr3=[1,2,3,4,5];
  2. let pusha=arr3.push(6,7);
  3. console.log(arr3,"长度:"+pusha);//[ 1, 2, 3, 4, 5, 6, 7 ]长度:7

5.shift() 删除数组开头第一项,减少数组的 length 值,然后返回移除的元素。
shift()会直接修改原数组,而不是创建一个新的数组

  1. let arr4 = [1,2,3,4,5];
  2. let shifta= arr4.shift();
  3. console.log(arr4,"被删除者:"+shifta);//[ 2, 3, 4, 5 ]被删除者:1

6.unshift() 用于向数组的开头添加一个或多个元素,并返回修改后数组的长度(数值类型)。
unshift()会直接修改原数组,而不是创建一个新的数组

  1. let arr5 = [1,2,3,4,5];
  2. let unshfita=arr5.unshift(0,1);
  3. console.log("长度现在是"+unshfita+"修改后的数组是:"+arr5);//长度现在是7修改后的数组是:0,1,1,2,3,4,5

7.splice():可以实现删除,插入,替换,截取。会直接修改原数组
删除:可以删除任意数量的项,需指定 2 个参数:要删除的第一项的位置和要删除的项数。
插入:可以向指定位置插入任意数量的项,需提供 至少3 个参数:起始位置、 0(要删除的项数)和要插入的项。

  1. //删除:
  2. let fName= ["赵","钱","孙","李"];
  3. let afterSplice = fName.splice(0,2);
  4. console.log(fName);//[ "孙", "李" ]
  5. //插入:
  6. fName.splice(0,0,"周","吴");
  7. console.log(fName);//[ "周", "吴", "孙", "李" ]

8.sort():用于对数组的元素进行排序
默认:按升序排列数组项,即最小的值位于最前面,最大的值排在最后面。
会直接修改原数组
sort()会转成字符串再比较,并从第1个字符进行比较

  1. let numbers = [3,9,7,6,4,2];
  2. numbers.sort();
  3. console.log(numbers);//[ 2, 3, 4, 6, 7, 9 ]
  4. let bigNumbers = [33,99,17,6,24,2];//这种直接用sort就会有问题
  5. bigNumbers.sort();
  6. console.log(bigNumbers);//[ 17, 2, 24, 33, 6, 99 ]
  7. //可以添加比较函数来解决:
  8. bigNumbers.sort((a,b)=>a-b);
  9. console.log(bigNumbers);//[ 2, 6, 17, 24, 33, 99 ]

9:filter():把数组中的某些元素过滤掉,然后返回剩下的元素,接收的是一个回调函数
数组中的每一项运行给定函数,返回满足过滤条件组成的新数组。
不会改变原数组

  1. let nums = [1,2,3,4,5,6,7,8,9,10];
  2. //返回大于6的数:
  3. console.log(nums.filter(a=>a>6));//[ 7, 8, 9, 10 ]
  4. //返回偶数:
  5. console.log(nums.filter(a=>a%2==0));//[ 2, 4, 6, 8, 10 ]
  6. //返回奇数:
  7. console.log(nums.filter(a=>a%2!=0));//[ 1, 3, 5, 7, 9 ]

10.利用set()对数组去重复
set数据类型:ES6提供了新的数据结构Set。
它类似于数组,但是成员的值都是唯一的,没有重复的值。

  1. let repeatNums = [1,1,2,2,3,3];
  2. //把数组转成set
  3. let set = new Set(repeatNums);
  4. //set再转数组:
  5. let newNums = Array.from(set);
  6. console.log(newNums);//[ 1, 2, 3 ]

二:JS中的JSON处理函数

1.JSON.stringify() 方法用于将 JavaScript 值转换为 JSON 字符串。
语法:JSON.stringify(value[, replacer[, space]])
value:必需, 要转换的 JavaScript 值(通常为对象或数组)。
replacer:可选。用于转换结果的函数或数组。
如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。
space:可选,文本添加缩进、空格和换行符

例如:

  1. let obj1 = {a:1,b:2,c:3};
  2. let result1 = JSON.stringify(obj1);
  3. console.log(result1,typeof result1);//{"a":1,"b":2,"c":3} string

加入第二个参数:
第二个参数支持数组 和 函数

数组:

  1. let result2 = JSON.stringify(obj1,["a","b"]);//记得""
  2. console.log(result2,typeof result2);//{"a":1,"b":2} string

函数然后加上第三个参数:

  1. let result3 = JSON.stringify(obj1,(key,value)=>{
  2. if(value>2){
  3. // 要过滤的数据直接返回undefined就可以了
  4. return undefined;
  5. }
  6. return value;
  7. },"---");
  8. console.log(result3);
  9. // 运行结果:
  10. // {
  11. // ---"a": 1,
  12. // ---"b": 2
  13. // }

2.JSON.parse() 方法用于将一个 JSON 字符串转换为对象。
语法:JSON.parse(text[, reviver])
text:必需,一个有效的 JSON 字符串。
reviver: 可选,一个转换结果的函数。

例如:

  1. let rus = JSON.parse(`{"a":1,"b":2,"c":3}`);
  2. console.log(rus,typeof rus);// { a: 1, b: 2, c: 3 } object

加入第二个参数

  1. let objDemo = JSON.parse(`{"a":1,"b":2,"c":3}`,(key,value)=>{
  2. if(value>2){
  3. // 要过滤的数据直接返回undefined就可以了
  4. return undefined;
  5. }
  6. return value;
  7. });
  8. console.log(objDemo,typeof objDemo);//{ a: 1, b: 2 } object

三:跨域的原理及解决办法

1.什么是跨域:当一个请求url的协议、域名/主机、端口三者之间任意一个与当前页面url不同即为跨域,只允许通过脚本发起基于同源的请求
2.解决办法
方案1:
以php为例,我们在php页面里面加一个请求头:

  1. header('Access-Control-Allow-Origin:,接受的域名');
  2. header('Access-Control-Allow-Origin:*');//*代表接受全部

方案2:jsonp
利用了script标签的src属性中的链接具有可跨域的”漏洞”,实现的跨域请求,但是jsonp跨域只能用get请求。

例如:
在html里面写一个发送按钮,点击发送后向php后台发送请求,返回年龄和身高信息,在客户端声明回调函数之后,客户端通过script标签向服务器跨域请求数据,然后服务端返回相应的数据并动态执行回调函数。

  1. <button>发送</button>

php部分:

  1. exit($_GET['callback'].'({height: 170, weight: 90})');

js代码:

  1. const btn = document.querySelector("button");
  2. function callback(data) {
  3. alert("身高: " + data.height + ", 体重: " + data.weight);
  4. };
  5. btn.onclick = ()=>{
  6. //生成一个script标签
  7. let script = document.createElement("script");
  8. script.src= "http://localhost:63342/php中文网教程/0108/test2.php?callback=callback";
  9. // 挂载到页面;
  10. document.body.insertBefore(script,document.body.firstElementChild);
  11. };

点击后证明发送成功:

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:服务器的应该返回一个规范的json,当然这里你是直接写成js语句并不报错,但显然实际工作中不可能这样写,都是通过宿主语言提供的api来生成json字符串做为参数返回到前端的
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post