数组元素求和
1.reduce()
var arr = [1, 2, 3, 4, 5]
var total = arr.reduce(function(prev, next){ return prev + next }, 0)
console.log(total);//返回 15
2.for循环
const data=[0,1,2,3,99];
const sum=(arr)=>{
let result=0;
for(let i=0;i<arr.length;i++){
result+=arr[i];
}
return result;
}
console.log(sum(data)) //得到105
取数组元素中和为n的对应键值
//例如:取出数组中元素和为9的键值
const twoSum =(nums,target)=>{
for(let i=0;i<nums.length;i++)
{
for(let j=0;j<nums.length;j++)
{
if(nums[i]+nums[j]===9)
{
return{index:[i,j],value:[nums[i],nums[j]]}
}
}
}
}
console.log(twoSum([3,2,7,11,15],9));//这里传入数组与和n的值
得到对应元素下标和值
取数组元素最后一位
1.直接下标值取该数组的length-1
const arr = [1,2,3];
console.log(arr[arr.length-1]); //可以取出最后一位 3
2.at() 可以传入下标取值(这个值可以是负值)。但是at()这个方法对兼容性要求比较高。
const arr=[1,2,3];
console.log(arr.at(-1)); //可以取出3
数组扁平化:也就是就是把多维数组转化成一维数组
1.递归:逐层遍历数组,把数组每个元素取出,拼接成新数组
var arr = [1,[2,[3,[4]]]]; //一个多维数组
function flat(arr)
{
var result = [];
if(!Array.isArray(arr)) //判断传进来值的类型是不是数组
{
result.push(arr); //如果arr不是数组,直接把数据压进result
}
else //否则
{
for(let i = 0;i<arr.length;i++)
{
result = result.concat(flat(arr[i])); //递归
}
}
return result;
}
console.log(flat(arr)); //得到[ 1, 2, 3, 4 ]
2.flat()方法
let arrList=[1,2,[3,4,[5]]]
console.log(arrList.flat(3)); //得到[1,2,3,4,5]
数组求交集、补集、并集
const one =[1,2,3];
const two =[2,3,4,5,6];
const intersection = (arr1,arr2)=>
{
const result = arr1.filter(item1=>arr2.some(item2=>item1===item2));
return result;
}
console.log(intersection(one,two)) //交集,得到[ 2, 3 ]
const one =[1,2,3];
const two =[2,3,4,5,6];
const comple=(arr1,arr2)=>
{
const result = arr1.filter(item1=>arr2.every(item2=>item1!==item2))
return result;
}
console.log(comple(one,two)) //补集,得到[1]
const one =[1,2,3];
const two =[2,3,4,5,6];
const union =(arr1,arr2)=>
{
const result=arr1.filter(item1=>arr2.every(item2=>item1 !==item2)).concat(arr2);
return result;
}
console.log(union(one,two))//并集,得到[ 1, 2, 3, 4, 5, 6 ]
统计数组中各元素的出现次数
let arr=['name','age','long','123','long','name','name'];
let result=arr.reduce(function(pre,cur){
if(!pre[cur])
{
pre[cur]=1;
}
else{ //出现相同元素就++
pre[cur]++;
}
return pre;
},{})
console.log(result); //得到{ 123: 1, name: 3, age: 1, long: 2 }
多维数组根据对应字符串元素获取其后面的value
const result=[['phone',1000],['mac',300],['imac',2394]];
const findPrice=(data,name)=>{
return new Map(data).get(name);
}
console.log(findPrice(result,"mac"));//传入数组和你想获取的商品名,得到300
数组对象根据属性之和筛选出满足条件的对应id
例如:求成绩之和大于180的学生
const data=[
{id:1,name:"1",chinese:90,math:90},
{id:2,name:"2",chinese:60,math:90},
{id:3,name:"3",chinese:100,math:90},
]
const filterStu=(arr,target)=>{
let result=[];
for(let i=0;i<arr.length;i++)
{
if(arr[i].chinese+arr[i].math>=target)
{
result.push(arr[i].name)
}
}
return result;
}
console.log(filterStu(data,180))//返回[ "1", "3" ],对应学生id
判断数组对象中是否包含某对象
let data = [{name:'你有事吗'},{name:'嗨嗨'},{name:'溜溜梅'},];//数组对象
let val = {name:'溜溜梅'};
console.log(JSON.stringify(data).indexOf(JSON.stringify(val)) !== -1);
//返回true
数组对象转JSON格式
1.JSON.stringify()
let formInfo = [
{
fieldId:1,
value:undefined
},
{
fieldId:2,
value:undefined,//发给后端需要对undefined处理
},
]
//运用JSON.stringify的第二个参数
const result = JSON.stringify(formInfo,(key,value)=>value === undefined?"":value);
console.log(result);
//返回[{"fieldId":1,"value":""},{"fieldId":2,"value":""}]
数组对象转对象
1.Object.fromEntries()
let result=[{name:"beijing",value:100},{name:"shanghai",value:60},]
const arrToObj=(data,realName,realValue)=>{
const res = Object.fromEntries(data.map(item=>{
return[item[realName],item[realValue]];
}));
return res;
}
console.log(arrToObj(result,'name','value'));
//得到{ beijing: 100, shanghai: 60 }
2.reduce()
let result=[{id:1,name:"beijing",value:100},{id:2,name:"shanghai",value:60},]
var obj=result.reduce((g,item)=>{g[item.id]=item;return g;},{});
console.log(obj);
//这样得到的是{1:{id:1,name:"beijing",value:100},2:{id:2,name:"shanghai",value:60}}