JavaScript数组及数组对象的各种操作(持续更新)

419 阅读2分钟

数组元素求和

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的值

得到对应元素下标和值 图片.png

取数组元素最后一位

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}}