js遍历数组,js遍历多维数组(面向对象)
js遍历数组,js遍历多维数组(面向对象)详细介绍
本文目录一览: js遍历数组some()方法
题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。一个简单的数组遍历题。
答案:js语言:
functionFind(target, array){returnarray.some(arr => arr.some(e => e === target))}
解释:
外面的some方法是对每个一维进行遍历,里面的some方法是对每个一维的每一个元素进行遍历,判断是否严格等于要找的target元素,复杂度为n方。
?=>是es6语法中的arrow function
例:(x) => x + 6 相当于
function(x){
? ? return x + 6;
};
那么e => e === target表示返回严格等于target的元素e
some()方法用于检测数组中的元素是否满足指定条件
some() 方法会依次执行数组的每个元素:
如果有一个元素满足条件,则表达式返回 true ?, 剩余的元素不会再执行检测。
如果没有满足条件的元素,则返回false。
注意: ?some() 不会对空数组进行检测。
注意: ?some() 不会改变原始数组。
这里小记一下some以及类似的every,对比一下其他遍历方法
some() 有一个元素满足条件,即返回true
const a = [1, 2, 3]console.log(a.some(v => v > 5))? //falseconsole.log(a.some(v => v < 2))? //true
every() 所有元素满足条件,即返回true
const a = [1, 2, 3]console.log(a.every(v => v < 5))? //trueconsole.log(a.every(v => v < 2))? //false
filter() 返回包含满足条件元素的数组
const a = [1, 2, 3]
console.log(a.filter(v => v < 3))? // [1, 2]
map() 返回一个新数组
const a = [1, 2, 3]
console.log(a.map(v => v + 5))? // [6, 7, 8]
forEach() 仅循环,无返回值,本质上相当于for
const a = [1, 2, 3]
a.forEach(v => console.log(v))? // 1? ? 2? ? 3
JS数组循环遍历常用的9种方法
首先定义一个数组
const arr = [1,2,3,4,5,6];
第一种:for循环
for (let i = 0;i
<arr.length;i++){
? ?console.log(arr[i]);
}
for(j=0,len=arr.length;j
<len;j++){} 这种方法基本上是所有循环遍历方法中性能最高的一种
第二种 for of?(需要ES6支持)?性能要好于forin,但仍然比不上普通for循环
for?(let?value?of?arr){
? ? ? ?console.log(value);
}
第三种 for in?它的效率是最低的
for?(let?i?in?arr){
? ? ? console.log(arr[i]);
?}
第四种 foreach()?实际上性能比普通for循环弱
????1、箭头函数写法
????arr.forEach(value?=>{
? ? ? ? console.log(value);
????})
????2、普通函数写法
????arr.forEach(function(value){
? ? ? ?console.log(value);
? ? ?})
第五种?entries()
for?(let?[index,?value]?of?arr.entries())?{
? ? ?console.log(value);
?}
第六种?keys()
for (let inx of arr.keys()){
console.log(arr[inx]);
}
第七种 reduce()
1、箭头函数
arr.reduce((pre,cur)=>{
? ? ? ?console.log(cur);
?})
2、普通函数
arr.reduce(function(pre,cur){
? ? ?console.log(cur);
})
第八种 map()?但实际效率还比不上foreach
1、箭头函数
?arr.map(value=>{
? ? ? ?console.log(value);
?})
2、普通函数
arr.map(function(value){
? ? ? console.log(value);
})
第九种?values()
for?(let?value?of?arr.values()){
? ? ? ?console.log(value);
?}
</arr.length;i++){
JS几种数组遍历方法总结及对比
这次给大家带来JS几种数组遍历方法总结及对比,JS几种数组遍历方法总结及对比的注意事项有哪些,下面就是实战案例,一起来看一下。前言这一篇与上一篇 JS几种变量交换方式以及性能分析对比 属于同一个系列,本文继续分析JS中几种常用的数组遍历方式以及各自的性能对比起由在上一次分析了JS几种常用变量交换方式以及各自性能后,觉得这种方式挺好的,于是抽取了核心逻辑,封装成了模板,打算拓展成一个系列,本文则是系列中的第二篇,JS数组遍历方式的分析对比JS数组遍历的几种方式JS数组遍历,基本就是for,forin,foreach,forof,map等等一些方法,以下介绍几种本文分析用到的数组遍历方式以及进行性能分析对比第一种:普通for循环代码如下:for(j = 0; j < arr.length; j++) {}简要说明: 最简单的一种,也是使用频率最高的一种,虽然性能不弱,但仍有优化空间第二种:优化版for循环代码如下:for(j = 0,len=arr.length; j < len; j++) {}简要说明: 使用临时变量,将长度缓存起来,避免重复获取数组长度,当数组较大时优化效果才会比较明显。这种方法基本上是所有循环遍历方法中性能最高的一种第三种:弱化版for循环代码如下:for(j = 0; arr[j]!=null; j++) {}简要说明: 这种方法其实严格上也属于for循环,只不过是没有使用length判断,而使用变量本身判断实际上,这种方法的性能要远远小于普通for循环第四种:foreach循环代码如下:arr.forEach(function(e){});简要说明: 数组自带的foreach循环,使用频率较高,实际上性能比普通for循环弱第五种:foreach变种代码如下:Array.prototype.forEach.call(arr,function(el){});简要说明: 由于foreach是Array型自带的,对于一些非这种类型的,无法直接使用(如NodeList),所以才有了这个变种,使用这个变种可以让类似的数组拥有foreach功能。实际性能要比普通foreach弱第六种:forin循环代码如下:for(j in arr) {}简要说明: 这个循环很多人爱用,但实际上,经分析测试,在众多的循环遍历方式中它的效率是最低的第七种:map遍历代码如下:arr.map(function(n){});简要说明: 这种方式也是用的比较广泛的,虽然用起来比较优雅,但实际效率还比不上foreach第八种:forof遍历(需要ES6支持)代码如下:for(let value of arr) {});简要说明: 这种方式是es6里面用到的,性能要好于forin,但仍然比不上普通for循环各种遍历方式的性能对比上述列举了几种方式都有一一做过对比分析,基本上可以得出的结论是:普通for循环才是最优雅的(PS:以上所有的代码都只是进行空的循环,没有再循环内部执行代码,仅仅是分析各自循环的时间而已)性能对比截图分析结果1以下截图中的数据是,在chrome (支持es6)中运行了100次后得出的结论(每次运行10次,一共10个循环,得到的分析结果) 可以看出,forin循环最慢。优化后的普通for循环最快分析结果2以下截图数据是,在chrome (支持es6)中运行了1000次后得出的结论(每次运行100次,一共10个循环,得到的分析结果) 相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!推荐阅读:Koa项目搭建步骤详解JS实现文本字体打印界面
js遍历多维数组(面向对象)
//实现一个 Array each方法 实现遍历多维数组
var arr = [1,2,3,[4,[5,6]]]; //arr.length
Array.prototype.each = function(fn){
try{
//1 目的? 遍历数组的每一项? //计数器 记录当前遍历的元素位置
this.i || (this.i=0);
//2 严谨的判断什么时候去走each核心方法
//当数组的长度大于 0 的时候 && 传递的参数 必须为函数
if( this.length>0? && fn.constructor == Function ){
// 循环遍历数组的每一项?
while( this.i < this.length ){
//获取数组的每一个值
var e = this[this.i]; //数组的每一项
//如果当前元素获取到了 并且当前元素是一个数组
if(e && e.constructor == Array ){
//直接递归操作
e.each(fn);
}else{
//如果不是数组 (那就是一个单个元素)
//var obj = true;
//fn.apply(obj,[e]);
//这的目的就是为了把数组的当前元素 传递给fn函数,并且让函数执行
fn.call(e,e);
}
this.i++
}
this.i == null ; //释放内存 垃圾回收机制回收变量
}
}catch(err){
//do something
}
return this;
}
arr.each(function(item){
console.log(item)
});
JS几种数组遍历方式总结
concat()连接两个或更多的数组,并返回结果。
join()把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
pop()删除并返回数组的最后一个元素
push()向数组的末尾添加一个或更多元素,并返回新的长度。
reverse()颠倒数组中元素的顺序。
shift()删除并返回数组的第一个元素。
slice()从某个已有的数组返回选定的元素等等。
JavaScript 遍历出一个数组中对象的某个值
var a = [{id: 152, name: "文件test"}, {id: 153, name: "文件test01"}];for(var i = 0; i < a.length; i++){ console.log(a[i].name);}
var obj = {'id': '152', 'name': '文件test'};//定义对象
//遍历对象元素
for(var k in obj){
console.log(k+':'+obj[k]);//注意这里应该使用obj[k]这种方式来遍历属性,如果使用obj.k,就会认为obj对象中有一个k属性
}
具体代码如下所示:
1、
2.简单了解js中的几种遍历
数组,可以用for循环遍历,性能比for in高,但对象,除了for in,我想不到还有什么可以遍历了。
方法: for, forEach,map,filter,every,some,in等
1. for循环,需要知道数组的长度,才能遍历,
2. forEach循环,循环数组中每一个元素并采取操作, 没有返回值, 可以不用知道数组长度
3. map函数,遍历数组每个元素,并回调操作,需要返回值,返回值组成新的数组,原数组不变
4. filter函数, 过滤通过条件的元素组成一个新数组, 原数组不变
5. some函数,遍历数组中是否有符合条件的元素,返回Boolean值
6. every函数, 遍历数组中是否每个元素都符合条件, 返回Boolean值
7、in, 除了遍历数组之外,还可以遍历对象
in 不仅可以用来 遍历对象,还可以用来遍历数组, 不过 i 对应与数组的 key值
如何遍历对象数组 nodejs
在遍历数组时,使用某个函数依次对数据成员做一些处理也是常见的需求。如果函数是同步执行的,一般就会写出以下代码:
var len = arr.length,
i = 0;
for (; i < len; ++i) {
arr[i] = sync(arr[i]);
}
// All array items have processed.
如果函数是异步执行的,以上代码就无法保证循环结束后所有数组成员都处理完毕了。如果数组成员必须一个接一个串行处理,则一般按照以下方式编写异步代码:
(function next(i, len, callback) {
if (i < len) {
async(arr[i], function (value) {
arr[i] = value;
next(i + 1, len, callback);
});
} else {
callback();
}
}(0, arr.length, function () {
// All array items have processed.
}));
可以看到,以上代码在异步函数执行一次并返回执行结果后才传入下一个数组成员并开始下一轮执行,直到所有数组成员处理完毕后,通过回调的方式触发后续代码的执行。
如果数组成员可以并行处理,但后续代码仍然需要所有数组成员处理完毕后才能执行的话,则异步代码会调整成以下形式:
(function (i, len, count, callback) {
for (; i < len; ++i) {
(function (i) {
async(arr[i], function (value) {
arr[i] = value;
if (++count === len) {
callback();
}
});
}(i));
}
}(0, arr.length, 0, function () {
// All array items have processed.
}));
可以看到,与异步串行遍历的版本相比,以上代码并行处理所有数组成员,并通过计数器变量来判断什么时候所有数组成员都处理完毕了。