首页 > 其他分享 >数组问题集合--更新中

数组问题集合--更新中

时间:2024-03-04 11:57:20浏览次数:25  
标签:arr 遍历 name -- var item 数组 集合

1. 多个数组长度相加

const arrays = [[1,2], [3,4], [5]]; // 示例数组
// 使用 reduce() 函数将所有数组的长度求和
const sumOfLengths = arrays.reduce((accumulator, currentArray) => accumulator + currentArray.length, 0);
console.log(sumOfLengths); // 输出结果为 6([1,2]、[3,4]、[5]三个数组的长度分别为 2、2、1)

2.获取对象数组中某属性的所有值。如果是要获取具体第几个属性的值,倒是可以用arr[i].name的方法来实现。若是全部的属性的值,并返回一个新的数组嘞,思路是加循环遍历

/*一、from方法*/
var arr = [
     {id: 1,name: "小明"},
     {id: 2, name: "小红"},
     {id: 3,name: "小蓝"}
 ]
var n = Array.from(arr,({name})=>name);
console.log(n); // ["小明", "小红", "小蓝"]

/*二、map方法*/
var userName = arr.map((item)=>{
    return item.name;
})
console.log(userName); // ["小明", "小红", "小蓝"]

/*map方法抽取成公共方法*/
function getAttrs(array,attr) {
    var result = array.map((item)=>{
        return item[attr];
    })
    return result;
}
console.log(getAttrs(arr,'id')); //  [1, 2, 3]
console.log(getAttrs(arr,'name')); // ["小明", "小红", "小蓝"] 
                         
/*三、forEach 方法*/
var userName = [];
arr.forEach((item)=>{
    userName.push(item.name);
})
console.log(userName); //  ["小明", "小红", "小蓝"]

 3.遍历数组的常见几种方式

/*一、普通for循环*/
for(var i = 0; i < arr.length;i++  ){ ... }

/*二、forEach循环
forEach接收一个回调函数作为参数,而这个回调函数有接受三个参数,作为参数。item是每个元素,index元素在数组中的下标,arr数组本身。没有返回值!*/
arr.forEach((item,index,arr)=>{ ... })
   
/*三、map循环   
map的用法和forEach差不多。但是map是有返回值的。他的返回值是一个新数组  arr---->[1,2,3],brr---->[2,4,6] */
var brr= arr.map((item,index,arr)=>{ return item * 2; })
    
/*四、filter
接受一个回调函数作为参数,返回值是一个新数组*/
var arr = [  {name:'张三',age:'20'}, {name:'李四',age:"50"} ]
arr.filter(item=>{
        return item.name; //返回值是 arr本身,所以元素的name都为true
})
arr.filter(item=>{
        return item.age>30; //[{name:"李四",age:"50"}]
})

/*五、every遍历
every()是对数组中的每一项运行给定函数,如果该函数对每一项返回true,则返回true。(全部符合条件)*/
var arr=[50,6,70,80];
arr.every((item,index,arr)=>{
        return item > 50; //每一项数据都要大于50
}) //false 

/*六、some遍历
some()是对数组中每一项运行指定函数,如果该函数对任一项返回true,则返回true。(只要有一个符合)*/
var arr=[50,6,70,80];
arr.some((item,index,arr)=>{
        return item > 50; //只要有一项数据都要大于50
}) //true

/*七、reduce*/
//reduce()方法接收一个函数作为累加器,数组中每个值(从左往右)开始缩减,最重为一个值
var arr= [1,2,3];
arr.reduce((a,b) => {
        return a + b;//6   
})
arr.reduce((previousValue,currentValue,index,arr)=>{
        return previousValue + currentValue;
})
//reduce还有第二个参数,我们可以把这个参数作为第一次调用callback时的第一个参数,上面这个例子因为没有第二个参数,所以直接从数组的第二项开始,如果我们给了第二个参数为5
arr.reduce((previousValue,currentValue,index,arr)=>{
        return previousValue + currentValue;
},5)
// 6, 8 ,11。第一次调用的previousValue的值就用传入的第二个参数代替

/*八、reduceRight
reduceRight()方法的功能和reduce()功能是一样的,不同的是reduceRight()从数组的末尾向前将数组中的数组项做累加。
reduceRight()首次调用回调函数callbackfn时,prevValue 和 curValue 可以是两个值之一。如果调用 reduceRight() 时提供了 initialValue 参数,则 prevValue 等于 initialValue,curValue 等于数组中的最后一个值。如果没有提供 initialValue 参数,则 prevValue 等于数组最后一个值, curValue 等于数组中倒数第二个值。*/
var arr = [0,1,2,3,4];
arr.reduceRight(function (preValue,curValue,index,array) {
        return preValue + curValue;
}); // 10 --- 7 = 4 + 3第一次;9 = 2 + 7第二次; 10 = 9 + 1第三次; 10 = 10 + 0第四次 

/*九、find
find()方法返回数组中符合测试函数条件的第一个元素。否则返回undefined */
var stu = [
    {name: '张三',gender: '男',age: 20},
    {name: '王小毛',gender: '男',age: 20},
    {name: '李四',gender: '男',age: 20}
]
function getStu(element){
    return element.name == '李四'
}
 stu.find(getStu)  //返回结果为 {name: "李四", gender: "男", age: 20} 

/*十、findIndex
对于数组中的每个元素,findIndex 方法都会调用一次回调函数(采用升序索引顺序),直到有元素返回 true。只要有一个元素返回 true,findIndex 立即返回该返回 true 的元素的索引值。如果数组中没有任何元素返回 true,则 findIndex 返回 -1。findIndex 不会改变数组对象!!!!!*/
var arr= [1,2,3];
arr.findIndex(function(x) { x == 2; }); //1
arr.findIndex(x => x == 4);//-1

/*十一、keys,values,entries
 ES6 提供三个新的方法 —— entries(),keys()和values() —— 用于遍历数组。它们都返回一个遍历器对象,可以用for...of循环进行遍历,唯一的区别是keys()是对键名的遍历、values()是对键值的遍历,entries()是对键值对的遍历*/
for (let index of ['a', 'b'].keys()) {
    console.log(index);
} // 0 // 1
for (let elem of ['a', 'b'].values()) {
    console.log(elem);
} // 'a' // 'b'
for (let [index, elem] of ['a', 'b'].entries()) {
    console.log(index, elem);
} // 0 "a" // 1 "b"

/*十二、for...of...循环*/
for(let item of arr){ ... }

4.对象遍历

/*一、Object.keys()遍历 
返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性).*/
var obj = {'0':'a','1':'b','2':'c'};
Object.keys(obj).forEach(function(key){
     console.log(key,obj[key]);
});//输出结果: 0 a  1 b  2 c

/*二、使用for…in…遍历
循环遍历对象自身的和继承的可枚举属性(不含Symbol属性).*/
var obj = {'0':'a','1':'b','2':'c'};
for(var i in obj) {
     console.log(i,":",obj[i]);
};//输出结果: 0 : a  1 : b  2 : c

/*三、Object.getOwnPropertyNames(obj)遍历
返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性).*/
var obj = {'0':'a','1':'b','2':'c'};
Object.getOwnPropertyNames(obj).forEach(function(key){
    console.log(key,obj[key]);
});//输出结果: 0 : a  1 : b  2 : c

/*四、Reflect.ownKeys(obj)遍历
返回一个数组,包含对象自身的所有属性,不管属性名是Symbol或字符串,也不管是否可枚举.*/
var obj = {'0':'a','1':'b','2':'c'};
Reflect.ownKeys(obj).forEach(function(key){
    console.log(key,obj[key]);
});//输出结果: 0 : a  1 : b  2 : c

/*五、使用for…of…遍历*/
const searchObj = {
  title: 'javascript',
  author: 'Nicolas',
  publishing: "O'RELLY",
  language: 'cn',
};
for(let key of searchObj){
      console.log(key)
}

 

标签:arr,遍历,name,--,var,item,数组,集合
From: https://www.cnblogs.com/ayuaichiyu/p/18051423

相关文章

  • Tomcat学习
     1.3Tomcat目录bin下,startup.bat, startup.sh,shutdown.bat,shutdown.shconflogging.properties日志相关配置confserver.xml需要配置,部署应用端口指定conftomcat-users.xml用户,角色以及功能confweb.xml全局的web.xml,局部覆盖全局1.4浏览器请求服务器流程......
  • uniapp开发微信小程序,动态排列组件的解决方案。
    微信小程序开发里面,并不支持<component:is="item",虽然微信小程序提供了WXML提供模板(template),对于uniapp并不管用,编译后,所以解决方案,只有目前(截止2022-04-15)只有两个:1.使用v-if,遍历组件,判断位置,来显示组件,达到排列要求2.第二种没那么麻烦,比较神奇,使用flex布局的order属性,外层......
  • npm国内源设置
    前言全局说明nmp国内源设置一、设置国内源淘宝源:npmconfigsetregistryhttps://registry.npm.taobao.org二、三、四、免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。参考、来源:路费学城:爬虫&逆向6期-第5章-day04头条-5.5......
  • 2024解题报告
    2024.3.4A.「ROI2017Day2」学习轨迹题面:给定两个二元组序列\text{A}和\text{B},每个二元组表示这个位置的数的编号与价值。可以对于两个序列各选取一个区间(可以为空),使得两个区间中的数的编号不重复出现,要求在满足该条件的情况下,区间的价值和最大。思路首先来考虑最劣解......
  • python hashlib模块详解
    hashlib是python自带的加密模块,提供了一些基础常用的加密方式,如:md5(),sha1(),sha224(),sha256(),sha384(),sha512(),blake2b(),blake2s() Hash对象提供了4个方法: --update(data):更新hash对象的字节数据,data是需要加密的文本内容,需要转为bytes类型,如果”abc123”.en......
  • Opengl不使用Glut单元显示字符
    在Opengl中显示字符多用Glut单元中的glutBitmapCharacter进行显示。这样有两个问题。1、是不能显示汉字。2、是要glut32.dll库支持。通过研究可以不用Glut,只用其它的GL库就能实现中文显示1、加入库usesOpenGLContext,GL,glu;2、生成Opengl显示窗口varGLBox:TOpenGLCont......
  • powerpoint:添加背景音乐
    一,插入音乐工具栏上插入标签->音频:从菜单中选择一项,得到音乐:放映时,点击音乐的图标开始播放音乐:说明:刘宏缔的架构森林—专注it技术的博客,网址:https://imgtouch.com本文: https://blog.imgtouch.com/index.php/2024/02/26/powerpoint-tian-jia-bei-jing-yin-yue/代码:......
  • ffmpeg 转码 H.265为 H.264
    树莓派3上omxplayer无法播放h.265编码的.mp4文件,需要进行转码.参考:  https://superuser.com/questions/1380946/how-do-i-convert-10-bit-h-265-hevc-videos-to-h-264-without-quality-loss单个文件:ffmpeg.exe-ixxx.mp4-map0-c:vlibx264-crf18-vfformat=......
  • 文件授权
    问题:在开发过程中,有时候本地创建的文件可以进行操作,放到linux服务器上出现文件不能操作的错误。要进行文件授权/***文件授权*@parampath*@methodaddPermissions*@authorzhangyingdong*@returnvoid*@throws*@date2024/3/4......
  • Unity3D 渲染队列 ZTest与ZWrite详解
    在Unity3D中,渲染队列(RenderingQueue)是一个非常重要的概念,它决定了游戏中各个物体的渲染顺序和优先级。而在渲染队列中,ZTest和ZWrite又是两个关键的参数,它们决定了物体在渲染的过程中如何处理深度测试和深度写入。本文将详细介绍Unity3D中的渲染队列、ZTest和ZWrite的概念,并给出相......