本篇文章給你們帶來的內容是關於javascript數組經常使用的遍歷方法(代碼示例),有必定的參考價值,有須要的朋友能夠參考一下,但願對你有所幫助。
javascript
前言php
本文主要介紹數組常見遍歷方法:forEach、map、filter、find、every、some、reduce,它們有個共同點:不會改變原始數組。java
1、forEach:遍歷數組es6
1segmentfault 2數組 3函數 4post 5測試 |
var colors = [ "red" , "blue" , "green" ]; ui
for ( var i = 0; i < colors.length; i++){
console.log(colors[i]);
}
|
1 2 3 4 |
colors.forEach( function (color){
console.log(color);
});
|
咱們再來看個例子:遍歷數組中的值,並計算總和
1 2 3 4 |
var numbers = [1,2,3,4,5];
var sum = 0;
numbers.forEach(number=>sum+=number)
console.log(sum)
|
2、map:將數組映射成另外一個數組
map經過指定函數處理數組的每一個元素,並返回處理後新的數組,map 不會改變原始數組。
forEach和map的區別在於,forEach沒有返回值。
map須要返回值,若是不給return,默認返回undefined
使用場景1
假定有一個數值數組(A),將A數組中的值以雙倍的形式放到B數組
1 2 3 4 5 6 7 |
var numbers = [1,2,3];
var doubledNumbers = [];
for ( var i = 0; i < numbers.length; i++){
doubledNumbers.push(numbers[i] * 2);
}
console.log(doubledNumbers);
|
1 2 3 4 5 |
var doubled = numbers.map( function (number){
return number * 2;
})
console.log(doubled);
|
使用場景2 假定有一個對象數組(A),將A數中對象某個屬性的值存儲到B數組中
1 2 3 4 5 6 7 8 |
var cars = [
{model: "Buick" ,price: "CHEAP" },
{model: "BMW" ,price: "expensive" }
];
var prices = cars.map( function (car){
return car.price;
})
console.log(prices);
|
3、filter:從數組中找出全部符合指定條件的元素
filter() 檢測數值元素,並返回符合條件全部元素的數組。 filter() 不會改變原始數組。
使用場景1:假定有一個對象數組(A),獲取數組中指定類型的對象放到B數組中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
var porducts = [
{name: "cucumber" ,type: "vegetable" },
{name: "banana" ,type: "fruit" },
{name: "celery" ,type: "vegetable" },
{name: "orange" ,type: "fruit" }
];
var filteredProducts = [];
for ( var i = 0; i < porducts.length; i++){
if (porducts[i].type === "fruit" ){
filteredProducts.push(porducts[i]);
}
}
console.log(filteredProducts);
{name: "celery" , type: "vegetable" }]
|
1 2 3 4 5 |
var filtered2 = porducts.filter( function (product){
return product.type === "vegetable" ;
})
console.log(filtered2);
|
使用場景2:假定有一個對象數組(A),過濾掉不知足如下條件的對象
條件: 蔬菜 數量大於0,價格小於10
1 2 3 4 5 6 7 8 9 10 11 12 |
var products = [
{name: "cucumber" ,type: "vegetable" ,quantity:0,price:1},
{name: "banana" ,type: "fruit" ,quantity:10,price:16},
{name: "celery" ,type: "vegetable" ,quantity:30,price:8},
{name: "orange" ,type: "fruit" ,quantity:3,price:6}
];
products = products.filter( function (product){
return product.type === "vegetable"
&& product.quantity > 0
&& product.price < 10
})
console.log(products);
|
使用場景3:假定有兩個數組(A,B),根據A中id值,過濾掉B數組不符合的數據
1 2 3 4 5 6 7 8 9 10 11 12 13 |
var post = {id:4,title: "Javascript" };
var comments = [
{postId:4,content: "Angular4" },
{postId:2,content: "Vue.js" },
{postId:3,content: "Node.js" },
{postId:4,content: "React.js" },
];
function commentsForPost(post,comments){
return comments.filter( function (comment){
return comment.postId === post.id;
})
}
console.log(commentsForPost(post,comments));
|
4、find:返回經過測試(函數內判斷)的數組的第一個元素的值
它的參數是一個回調函數,全部數組成員依次執行該回調函數,直到找出第一個返回值爲true的成員,而後返回該成員。若是沒有符合條件的成員,則返回undefined。
使用場景1
假定有一個對象數組(A),找到符合條件的對象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
var users = [
{name: "Jill" },
{name: "Alex" ,id:2},
{name: "Bill" },
{name: "Alex" }
];
var user;
for ( var i = 0; i < users.length; i++){
if (users[i].name === "Alex" ){
user = users[i];
break ;
}
}
console.log(user);
|
1 2 3 4 5 |
user = users.find( function (user){
return user.name === "Alex" ;
})
console.log(user);
|
使用場景2:假定有一個對象數組(A),根據指定對象的條件找到數組中符合條件的對象
1 2 3 4 5 6 7 8 9 10 11 |
var posts = [
{id:3,title: "Node.js" },
{id:1,title: "React.js" }
];
var comment = {postId:1,content: "Hello World!" };
function postForComment(posts,comment){
return posts.find( function (post){
return post.id === comment.postId;
})
}
console.log(postForComment(posts,comment));
|
5、every&some
every:數組中是否每一個元素都知足指定的條件
some:數組中是否有元素知足指定的條件
使用場景1:計算對象數組中每一個電腦操做系統是否可用,大於16位操做系統表示可用,不然不可用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
var computers = [
{name: "Apple" ,ram:16},
{name: "IBM" ,ram:4},
{name: "Acer" ,ram:32}
];
var everyComputersCanRunProgram = true;
var someComputersCanRunProgram = false;
for ( var i = 0; i < computers.length; i++){
var computer = computers[i];
if (computer.ram < 16){
everyComputersCanRunProgram = false;
} else {
someComputersCanRunProgram = true;
}
}
console.log(everyComputersCanRunProgram);
console.log(someComputersCanRunProgram);
|
1 2 3 4 5 6 7 8 9 |
var every = computers.every( function (computer){
return computer.ram > 16;
})
console.log(every);
var some = computers.some( function (computer){
return computer.ram > 16;
})
console.log(some);
|
一言以蔽之:Every: 一真即真;Some: 一假即假
使用場景2:假定有一個註冊頁面,判斷全部input內容的長度是否大於0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
function Field(value){
this.value = value;
}
Field.prototype.validate = function (){
return this.value.length > 0;
}
var username = new Field( "henrywu" );
var telephone = new Field( "18888888888" );
var password = new Field( "my_password" );
console.log(username.validate());
console.log(telephone.validate());
console.log(password.validate());
var fields = [username,telephone,password];
var formIsValid = fields.every( function (field){
return field.validate();
})
console.log(formIsValid);
if (formIsValid){
} else {
}
|
6、reduce:將數組合成一個值
reduce() 方法接收一個方法做爲累加器,數組中的每一個值(從左至右) 開始合併,最終爲一個值。
使用場景1: 計算數組中全部值的總和
1 2 3 4 5 6 7 |
var numbers = [10,20,30];
var sum = 0;
for ( var i = 0; i < numbers.length; i++){
sum += numbers[i];
}
console.log(sum);
|
1 2 3 4 5 6 |
var sumValue = numbers.reduce( function (sum2,number2){
console.log(sum2);
return sum2 + number2;
},0);
console.log(sumValue);
|
使用場景2:
將數組中對象的某個屬性抽離到另一個數組中
1 2 3 4 5 6 7 8 9 10 |
var primaryColors = [
{color: "red" },
{color: "yellow" },
{color: "blue" }
];
var colors = primaryColors.reduce( function (previous,primaryColor){
previous.push(primaryColor.color);
return previous;
},[]);
console.log(colors);
|
使用場景3:判斷字符串中括號是否對稱
1 2 3 4 5 6 7 8 9 |
function balancedParens(string){
return !string.split( "" ).reduce( function (previous,char){
if (previous < 0) { return previous;}
if (char == "(" ){ return ++previous;}
if (char == ")" ){ return --previous;}
return previous;
},0);
}
console.log(balancedParens( "((())))" ));
|
以上就是javascript數組經常使用的遍歷方法(代碼示例)的詳細內容。
本文轉載於:segmentfault,僅因寫的全面,故拿來作筆記,若有侵犯,請聯繫刪除。