ES6学习——数组方法

ES6与javaScript的关系

ECMAScript是javaScript的标准(语法规范),JavaScript用于遵循这个规范。
部分浏览器没有支持ES6的语法,如果他不知道,我们可以用babel进行转换。

ES6中的数组方法

ES6中的数组方法有:forEach、map、filter、 find、 every、 some 、reduce等
下面将对其与ES5语法进行对比学习:

forEach

var color =['red','blue','yellow'];
 //ES5遍历数组
 for(var i=0;i< color.length;i++){
   console.log(color[i]);
 }

 //ES6  foreach
 color.forEach(function(color){
   console.log(color);
 });

 //遍历数组里的值
 var numbers=[1,4,2,5,7]
 var sum=0;
numbers.forEach(function(number){
   sum+=number
 });
 //遍历数组里的值
 var numbers=[1,4,2,5,7]
 var sum=0;
 numbers.forEach(function(number){
 sum+=number
 });

filter

/*
*假定有一个对象数组A,获取数组中的指定类型的对象放到B数组中
* 过滤:filter
 */

 var products= [
     {name:"cucumber",type:"vegetable"},
 {name:"banana",type:"fruit"},
  {name:"celery",type:"vegetable"},
   {name:"orange",type:"fruit"},
]
 //ES5
 var filteredProducts=[];
  for(var i=0;i<products.length;i++){
   if(products[i].type ==="fruit"){
      filteredProducts.push(products[i]);
   }
 }
 console.log(filteredProducts);
 //ES6
 var  filtered2=products.filter(function(product){
   return product.type ==="vegetable";
 })
 console.log(filtered2);

/*
*假定有一个对象数组A,获取数组中的指定类型的对象放到B数组中
* 过滤:filter
 */

var products= [
  {name:"cucumber",type:"vegetable",quantity:0,price:1},
  {name:"banana",type:"fruit",quantity:8,price:10},
  {name:"celery",type:"vegetable",quantity:3,price:3},
  {name:"orange",type:"fruit",quantity:8,price:8},
]

products = products.filter(function(product){
  return product.type === "vegetable"
  && product.quality > 0
      && product.price < 10
})
console.log(products);
/*
*假定有两个数组(A,B),根据A中的Id值,过滤掉B数组中不符合的数据
*
 */
var post={id:4,title:"java"}
var comments=[
  {postId:4,content:"javavaaa1"},
  {postId:2,content:"javavaaa3"},
  {postId:3,content:"javavaaa5"},
  {postId:4,content:"javavaaa7"},
]
function f(post,comments) {
  return comments.filter(function(comment){
    return comments.postId ===post.id;
  })

}
console.log(f(post,comments));

find

/*
*假设有一个对象数组,找到符合条件的对象
 */
var users = [
  {name:'liya'},
  {name:'lucy',id:2},
  {name:'bob'},
  {name:'lucy'},
]

//ES5
var user;
for(var i= 0;i<users.length;i++){
  if(users[i].name === 'lucy'){
    user=users[i];
    break;//找到结果后退出
  }
}
console.log(user);

//ES6 find
//优点:当程序执行到我们所想要的v结果时,他便不会在去执行
user = users.find(function (user) {
  return user.name === 'lucy'
})
console.log(user);

/*
*个顶一个数组,根据指定对象的条件找到数组中符合条件的对象
*
 */
var posts=[
  {id:1,title:"11111"},
  {id:2,title:"33333"}
];

var comment ={postId:1,content:"helloWorld"};

function postForComment (posts,comment) {
  return posts.find(function(post){
    return post.id === comment.postId;
  })
}

console.log(postForComment(posts,comment));

reduce

/*
*计算数组中所有值的总和
* reduce 函数拥有两个参数第一个参数必须进行初始化
 */
var numbers = [20,50,70]
var sum=0
//ES5
for(var i= 0;i<numbers.length;i++){
  sum+=numbers[i]
}
console.log(sum);

//es6
 var sumValue = numbers.reduce(function(sum,number){
  return sum+number;
},0)
console.log(sumValue);

/*
*数组中的对象中的某一个属性抽离到另外一个数组中去

 */
var primaryColors=[
  {color:'red'},
  {color:'yellow'},
  {color:'blue'},
  {color:'pink'}
]
var colors = primaryColors.reduce(function(privies,primaryColor){
  privies.push(primaryColor.color);

  return privies;
},[])

console.log(colors);

/*
*判断字符串中的括号是否对称
 */
function banlance(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(banlance("()(())"))

模板字符串

模板字符串[单引号]可以解决我们在书写在拼接字符串中出现拼接错误的问题。
在我们的模板字符串里面无需进行代码的拼接,我们只需要在模板字符串里面按照正常的结构来书写我们的代码,也可调用我们所需要调用的方法变量等。

模板字符串:`    `

举个列子:

let name='lucy'
let telement =
  `
  <h1>hello word</h1>
    <h1>hello ${name}</h1>
  <p>五月份要加油啊有,冲啊啊啊啊啊啊啊啊</p>
  <ur>
  <li>1</li>
    <li>2</li>
      <li>3</li>
        <li>4</li>
</ur>
  `;
document.getElementById('telement').innerHTML =telement

增强对象字面量

能解决的问题:缩减代码

function creatbookShop(inventory){
  return {
    inventory:inventory,
    inventoryValue:function(){
      return this.inventory.reduce((total,book) => total+book.price,0);
    },
    priceForTitle:function(title){
     return this.inventory.find(book => book.title ===title).price;
    }
  }
}

const inventory=[
  {title:"vue",price:13},
  {title:"javaScript",price:12}
];

const bookshop =creatbookShop(inventory);
console.log(bookshop.inventoryValue());
console.log(bookshop.priceForTitle("vue"));

spread operator 展开运算符

优点:更快,更便捷的操作数组。
展开运算符(spread)是三个点(…),可以将可迭代对象转为用逗号分隔的参数序列

// function addNumbers(q,e,b,h) {
//   var numbers= [q,e,b,h]
//   return numbers.reduce((sum, number) => {
//     return sum + number
//   }, 0)
// }
//
// console.log(addNumbers(1,4,6,8,9));
/*
*用法一:
 */
function addNumbers(...numbers) {
  //var numbers= [q,e,b,h]
  return numbers.reduce((sum, number) => {
    return sum + number
  }, 0)
}
/*
*用法二:替代push的操作
 */
var defaultColor = ["red","pink"]
var favorColor = ["black","blue"]
//concat
//defaultColor = defaultColor.concat(favorColor);
//console.log(defaultColor);
console.log([...defaultColor, ...favorColor]);

var fallColor = ["red","yellow"]
console.log([...defaultColor, ...favorColor,...fallColor]);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值