分割数组
<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-8
var 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)*2
arr[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].name
var age=arr[i].age
var 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 = /<[^<>]+>/g
var r = /[^\d]/g
var 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 = /<[^<>]+>/g
var 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}=item
console.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>