分割数组

<script>var arr=[1,2,3,4,5,6,7,8,9]// 分析// slice(0,3) 0-2// slice(3,6) 3-5// slice(6,9) 6-8var newarr=[]for(var i=0;i<arr.length;i+=3){newarr.push(arr.slice(i,i+3))}console.log(newarr);</script>
增删改查数组
1-添加like属性 并age大于24的like为true

<body><script>var arr=[{name:"lisi",age:"12px"},{name:"lisi",age:"13px"},{name:"lisi",age:"14px"}]for(var i=0;i<arr.length;i++){var age=parseInt(arr[i].age)*2arr[i].age=age;arr[i].like=true;if(parseInt(arr[i].age)<=24){arr[i].like=false;}}console.log(arr);</script></body>
2-求最小值
<script>var arr=[4,6,18,1];var num;for(var i=0;i<arr.length;i++){num=arr[i]if(arr[i]>num){num=arr[i]}}console.log(num);</script>
3-合并+去除数组

<script>var arr = [{name: "lisi",age: 18,likes: ["lol", "zq"],alikes: ["music", "111"],sex: "male"},{name: "王五",age: 18,likes: ["12", "book"],alikes: ["go", "222"],sex: "male"},{name: "张三",age: 18,likes: ["篮球", "run"],alikes: ["333", "333"],sex: "male"}]var res=[];for(var i=0;i<arr.length;i++){var name=arr[i].namevar age=arr[i].agevar likes=arr[i].likes.concat(arr[i].alikes)res.push({name:name,age:age,likes:likes})}console.log(res);</script>
es6方法:
<script>var arr = [{name: "lisi",age: 18,likes: ["lol", "zq"],alikes: ["music", "111"],sex: "male"},{name: "王五",age: 18,likes: ["12", "book"],alikes: ["go", "222"],sex: "male"},{name: "张三",age: 18,likes: ["篮球", "run"],alikes: ["333", "333"],sex: "male"}]var res=[];for(var i=0;i<arr.length;i++){//解构var{name,age,likes,alikes}=arr[i];//展开likes.push(...alikes);//键值相同var obj={name,age,likes}res.push(obj)}console.log(res);</script>
升序降序
1-根据价格升序
var arr=[{name:"肯德基",price:100,distance:100},{name:"必胜客",price:200,distance:500},{name:"华莱士",price:50,distance:1000},]//根据价格进行升序 --从小到大arr.sort(function(a,b){return a.price-b.price})console.log(arr);
2-根据价格降序
//根据价格进行降序 --从大到小arr.sort(function(a,b){return b.price-a.price})console.log(arr);
3-根据距离进行降序
//根据距离进行降序 --从大到小arr.sort(function(a,b){return b.distance-a.distance})console.log(arr);
4-根据选择距离/价格排序
<select id="myselect"><option value="price">低价优先</option><option value="distance">距离优先</option></select><script>var arr=[{name:"肯德基",price:100,distance:100},{name:"必胜客",price:200,distance:1500},{name:"华莱士",price:50,distance:1000},]var myselect=document.getElementById("myselect");myselect.onchange=function(){console.log(this.value);var value=this.value;arr.sort(function(a,b){return a[value]-b[value] //对象的某个属性使变量 不能使用. 只能使用[]})console.log(arr);}</script>
5-求和
<script>var arr=[{name:"肯德基",price:100,distance:100,num:2},{name:"必胜客",price:200,distance:1500,num:1},{name:"华莱士",price:50,distance:1000,num:5},]var sum=0;for(var i=0;i<arr.length;i++){sum+=arr[i].price*arr[i].num}console.log(sum);</script>
关键字搜索查询/删除
1-根据id输入删除
<body><input type="text" id="app"><script>var arr=[{name:"李四",id:"1001"},{name:"王四",id:"1002"},{name:"张四",id:"1003"},{name:"赵四",id:"1004"},]var app=document.getElementById("app")app.onkeydown=function(event){if(event.keyCode==13){var id=Number(this.value)var index=arr.findIndex(item=>{return item.id==id;})arr.splice(index,1);console.log(arr);}}</script></body>
2-选出大于16岁的成员:
<script>var arr=[{name:"李四",age:"18岁"},{name:"李四",age:"20岁"},{name:"李四",age:"8岁"},{name:"李四",age:"16岁"}]var text=[];for(var i=0;i<arr.length;i++){var age=parseInt(arr[i].age)if(age>16){text.push(arr[i])}}console.log(text);</script>
3-关键字查询
方法1
<body><input type="text" id="input"><script>var searchs = [{spell: "A",citys: [{ name: "阿里", id: 1001 },{ name: "阿拉", id: 1001 },{ name: "阿克", id: 1001 },]},{spell: "T",citys: [{ name: "天下", id: 2001 },{ name: "天天", id: 2002 },{ name: "天里", id: 2003 }]}]var arr = [];var input = document.getElementById("input");//1、获取关键字input.onkeydown = function (event) {if (event.keyCode == 13) {if (this.value != "") {var kw = this.value;//2、使用关键字对数组进行遍历for (var i = 0; i < searchs.length; i++) {var citys = searchs[i].citys;for (j = 0; j < citys.length; j++) {//3、获取包含关键字的项目if (citys[j].name.includes(kw)) {arr.push(citys[j])}}}console.log(arr);}}}</script>
方法2
<body><input type="text" id="input"><script>var searchs = [{spell:"A",city: [{ name: "阿里", id: 1001 },{ name: "阿拉", id: 1001 },{ name: "阿克", id: 1001 },]},{spell:"T",city: [{ name: "天下", id: 2001 },{ name: "天天", id: 2002 },{ name: "天里", id: 2003 }]}]var arr = [];var input = document.getElementById("input");input.onkeydown = function (event) {if (event.keyCode == 13) {if (this.value != "") {var kw = this.value;addCity(kw);console.log(arr);}}}function addCity(keyword) {for (var i = 0; i < searchs.length; i++) {var city = searchs[i].city;for (j = 0; j < city.length; j++) {if (city[j].name.includes(keyword)) {arr.push(city[j]);}}}}console.log(arr);</script></body>
历史搜索
1-初级历史搜索(遇到重复弹窗口)
<body><input type="text" id="input"><h2>历史搜索</h2><div id="app"></div><script>var input = document.getElementById("input");var historys = []//1\获取输入框的值input.onkeydown = function (event) {if (event.keyCode == 13) {//2、只要数组中没有的值同时字符不能为空,才向数组添加if (this.value != "" && historys.indexOf(this.value) == -1) {var p = document.createElement("p");p.innerHTML = this.value;app.prepend(p);historys.unshift(this.value);this.value = ""console.log(historys)} else {alert("输入的字段不可以是空字符或相同字段")}}}</script></body>
2-进阶历史搜索(搜索重复置于顶部)
jquery:
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script></head><body><h2>历史搜索</h2><input type="text" id="app"><div class="container"></div><script>//1、获取输入框的值var historys = [];$("#app").keyup(function (event) {if (event.keyCode == 13) {//2、将值添加到一个数组里面去console.log(Boolean($(this).val()))var value = $(this).val();var template =`<button>${value}</button>`//只有数组中不包含这个关键字才向数组添加if (value && !historys.includes(value)) {historys.unshift(value);//3、渲染数据到页面$(".container").prepend(template)$(this).val("")} else {//4、当输入的值数组中存在的时候 让其至于数组的首位var index = historys.indexOf(value);var res = historys.splice(index, 1);historys.unshift(value);console.log(historys);//ui联动$(".container button").eq(index).remove();$(".container").prepend(template)}}})</script></body>
需要注意的是jq渲染的页面是可以直接用<button>${value}</button>将带html结构的字符串,转化成html
但是原生的js不能识别标签
置于数组首位原理
<script>var arr=["html","css","js","vue"]var res=arr.splice(2,1)console.log(res);console.log(arr);arr.unshift(...res);console.log(arr);</script>
让数组中被搜索的值 置于顶部
<body><input type="text" id="app"><script>//让数组中被搜索的值 置于顶部var arr = ["html", "js", "vue", "zz"]$("#app").keyup(function (event) {if (event.keyCode == 13) {var value = $(this).val();//只有包含才判断if (arr.indexOf(value) != -1) {console.log(value);var index = arr.indexOf(value);arr.splice(index, 1);arr.unshift(value);console.log(arr);}}})</script></body>
原生:
<body><input type="text" id="app"><script>/* 需要将数组中被搜索到的值,至于数组的顶部 */var arr = [ "html","css","js","vue","react"]/* [ "react","vue",html","css","js"] */var app = document.getElementById("app");app.onkeydown = function(event){if(event.keyCode==13){if(this.value){/* 1.数组中值对应的下标 */var index = arr.indexOf(this.value);/* 2.将值删除 */var item = arr.splice(index,1);/* 3.将删除的值至于数组的顶部 */arr.unshift(...item);console.log(arr)}}}</script></body>
历史搜索记录
<body><input type="text" id="input"><h2>历史搜索</h2><div id="app"></div><script>var input = document.getElementById("input");var app = document.getElementById("app");var historys = []/* 1、获取输入框的值 */input.onkeydown = function (event) {if (event.keyCode == 13) {// console.log(this.value)/* 2、只有数组中没有的值同时字符不能空,才向数组添加 */if (this.value != "" && historys.indexOf(this.value) == -1) {var p = document.createElement("p");p.innerHTML = this.value;app.prepend(p);historys.unshift(this.value);this.value = ""console.log(historys)}else{alert("输入的字段不能是空字符或相同的字段")}}}</script></body>
原生历史搜索 记录置顶 点击删除
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style></style></head><body><input type="text" id="input"><h2>历史搜索</h2><div id="#app"></div><script>var input = document.getElementById("input")var app = document.getElementById("#app")var historys = []var item = document.getElementsByTagName("p");input.onkeydown = function (event) {if (event.keyCode == 13) {console.log(item);if (this.value != "" && historys.indexOf(this.value) == -1) {var p = document.createElement("p");historys.unshift(this.value)// p.setAttribute("data-aid",historys.length-1)// p.className = 'item'p.innerHTML = this.value;app.prepend(p)// this.value = ""console.log(historys);// console.log(item);for (var i = 0; i < item.length; i++) {item[i].onclick = function () {console.log(this.innerHTML);var index = historys.indexOf(this.innerHTML)// console.log(index);historys.splice(index, 1)console.log(historys);// app.removeChild(app.childNodes[index]);item[index].remove()}}} else {alert("错误")}}}</script></body></html>
1-数组变对象并+name属性
<script>var str="剧情,犯罪,月黑风高"var arr=[]str=str.split(",")str.map(name=>{arr.push({name})})console.log(arr);</script>
2-对象转数组+变属性

<script>var obj = {top250: ["你好666", "他的666"],comingSoon: ["额外111", "的广告和111"],theaters: ["放大镜222", "放阿瓦蒂222"]}// 1、获取对象中属性的值var arr = []for (var key in obj) {var a = obj[key]//2、需要将属性的值整合到一个数组中去arr.push(...a)}var res=[]var reg=/\d/g//3、对数组中每一项的值,过滤arr.forEach(name=>{var name=name.replace(reg,"")res.push({name})})console.log(res);</script>
3-字符串变为数组包含对象

<script>var str = `<span>9.7</span><span>-250人评价</span><br><span>9.6</span><span>-450人评价</span><br><span>9.5</span><span>-550人评价</span>`;str = str.split("<br>")var reg = /<[^<>]+>/gvar r = /[^\d]/gvar arr = []str.map(item => {var a = item.replace(reg, "").split("-")两种方法添加 // var obj = {}// obj.star = a[0]; obj.rating = a[1].replace(r, "")// arr.push(obj)arr.push({star:a[0],rating: a[1].replace(r, "")})})console.log(arr);</script>
2:
<script>var str = `<span>9.7<span><span>-248人评价</span><br><span>9.5<span><span>-48人评价</span><br><span>9.6<span><span>-508人评价</span>`;/*arr = [{star:9.7,rating:248},{star:9.5,rating:48},{star:9.6,rating:508},]*//* 1、<br> */var arr = str.split("<br>");// console.log(arr)/* 2、将数组中每一项的html标签去除 9.7-248人评价 */var reg = /<[^<>]+>/gvar res = arr.map(item=>{// console.log(item.trim().replace(reg,""))return item.trim().replace(reg,"")})// console.log(res)/* 3、[[9.7,248]....] */var list = [];res.forEach(item=>{// console.log(item.split("-"))list.push(item.split("-"))})var sum = [];var rNum = /[^\d]/g;list.forEach(item=>{console.log(item)sum.push({star:item[0],rating:item[1].replace(rNum,"")})})console.log(sum)</script>
4-json对象

<script>var str = `[{"name":"李四666","data":[2019,10,11]},{"name":"李三666","data":[2019,10,11]},{"name":"李二666","data":[2019,10,11]}]`var arr = JSON.parse(str)var list=[];arr.forEach(item=>{console.log(item);var {name,data}=item;name=name.replace(/\d/g,"")data=data.join("-")list.push({name,data})})console.log(list);</script>
5-重复的不添加

<script>var arr=[{name:"lisi"},{name:"css"},{name:"vue"},{name:"vue"},{name:"html"},{name:"html"}]var list=[]arr.map(item=>{var {name}=item;if(!list.includes(name)){list.push(name)}})console.log(list);</script>
6-重复不添加

<script>var arr={A:[{city:"武汉"},{city:"广州"}],B:[{city:"深圳"},{city:"广州"}],C:[{city:"上海"},{city:"武汉"}],}var list=[]for(var key in arr){console.log(arr[key]);list.push(...arr[key])}console.log(list);var res=[]list.forEach(item=>{var {city}=itemconsole.log(item);if(!res.includes(city)){res.push(city)}})console.log(res);</script>
7-数组包对象包数组
<script>var obj = {top250: ["你好666", "他的666"],comingSoon: ["额外111", "的广告和111"],theaters: ["放大镜222", "放阿瓦蒂222"]}var reg = /\d+/g// 属性不要数组 值只保留前面的一位var arr=[]for(var k in obj){var key=k.replace(reg,"")console.log(key);var res=(obj[k][1])console.log(res);var ob={}ob[key]=[res]arr.push(ob)}console.log(arr);</script>



