JavaScript学习笔记之数组求和方法_javascript技巧_脚本之家

推荐阅读:JavaScript学习笔记之数组的增、删、改、查

广大时候需求累积数组项获得三个值(举个例子说求和)。即使你蒙受一个临近的主题材料,你想到的点子是如何吗?for或许while循环,对数组进行送代,依次把她们的值加起来。举个例子

因此近些日子上学,更加的感到JavaScript的强有力与吸重力之处,仅数组叁个知识点就让笔者那样的初读书人折腾了十分久。折腾是煎熬,但还是很有功效的,近期的学习到的一些基本知识,就在和谐的作业就用到了。顿感自信心爆棚,小编也可能有一天能学会JavaScript。

var arr = [1,2,3,4,5,6]; 
Array.prototype.sum = function (){ 
var sumResult = 0; 
for (var i = 0; i < this.length; i++) { 
sumResult += parseInt(this[i]); 
}
 return sumResult; 
} 
arr.sum(); // 21

其他非常少说了,我们明日联手来玩数组的求和,看看有哪些措施能够兑现数组的求和。

或者

数组方法

var arr = [1,2,3,4,5,6];
Array.prototype.sum = function(){
  var sumResult = 0;
  var i = this.length;
  while(i--){
    sumResult += parseInt(this[i]);
  }
return sumResult;
}
arr.sum(); //21

JavaScript中数组有很种种方式,下图能越来越好的向您演说JavaScript有些许种艺术,功能是吗:

固然上面使用for和while都能兑现内需的作用,但在JavaScript中有未有更加好的方案吗?回答是迟早的,在JavaScript中(ESMAScript6)提供了此外四个数组方法reduce(State of Qatar和reduceRight(卡塔尔,那四个数组会送代数组的全体数组项,然后回到叁个结尾值。接下来的内容,首要来上学二种情势。

简易点回看一下如今学习的文化:

reduce()方法

reduce(卡塔尔国方法选择多个函数callbackfn作为累计器(accumulator卡塔尔(قطر‎,数组中的每三个值(开头会集),最终成为一个值。

push(State of Qatar:向数组末尾增加二个或七个成分

语法

array.reduce(callbackfn,[initialValue]);

reduce(卡塔尔国方法选用callbackfn函数,而以此函数包蕴八个参数:

function callbackfn(preValue,curValue,index,array){}

preValue:上二次调用回调重回的值,大概是提供的最早值(initialValue卡塔尔(قطر‎
curValue:数组中当前被拍卖的数组项
index:当前数组项在数组中的索引值
array:调用reduce(卡塔尔国方法的数组

而initialValue作为第叁回调用callbackfn函数的首先个参数。

reduce(State of Qatar方法为数组中的每一个因素依次实践回调函数。
callbackfn,不含有数组中被删去或许尚未被赋值的元素,接受几个参数:开始值(或许上壹次回调函数的重临值卡塔尔(قطر‎,当前成分值,当前目录,调用reduce(卡塔尔国的数组。

回调函数先是次试行时,preValue和curValue能够是叁个值,如果initialValue在调用reduce(卡塔尔(قطر‎被提供,那么首先个preValue就等于initialValue,倘使initialValue未有被提供,那么preValue等于数组中的第三个值,curValue等于数组中的第三个值。

宛如那一个:

var arr = [1,2,3,4,5];
arr.reduce(function(preValue,curValue,index,array){
  return preValue + curValue;
}) //15

上面包车型大巴实例是还未提供initialValue那个参数,假使提供initialValue这一个参数,initialValue = 5;

var arr = [1,2,3,4,5];
arr.reduce(function(preValue,curValue,index,array){
    return preValue + curValue;
},5)

那样一来,不用多说,应该都精通,可以利用reduce(卡塔尔国完结数组求和的效应,如

  var arr = [1,2,3,4,5];
  Array.prototype.sum = function(){
  var sumResult = 0;
  return this.reduce(function(preValue,curValue){
    return sumResult = preValue + curValue;
  })
  return sumResult;
}
arr.sum();

那基本正是以此艺术的用发。

JavaScript学习笔记之数组求和方法_javascript技巧_脚本之家。和它相近的还应该有八个reduceRight(State of Qatar方法的功用和reduce(卡塔尔国方法的成效是大同小异的,不相同的是reduceRight(卡塔尔(قطر‎方法是从数组的末端向前将数组中的数组项做累积。

unshift(State of Qatar: 向数组的启幕加多一个或八个成分

Object.assign()

语法

Object.assign(target,...sources);
target是目标对象
sources是源对象
返回目标对象

在JS中有四个很恶心的主题材料,正是引用数据类型让赋值的时候,操作叁个另三个也会产生变化,很规范的二个旅馆难点。

    var obj = {a:1};
    var obj2 = obj;
    obj2.a = 2;
    console.log(obj) //a = 2

仿佛这么,在ES6,现身了消除方法Object.assign(卡塔尔;

var obj = {a:1};
var copy = Object.assign({},obj);
copy.a = 2;
console.log(obj) //a = 1

pop(State of Qatar: 删除数组最后三个因素

很有力的三个情势

假若指标对象中的属性具备形似的键,则属性将被源中的属性覆盖。后来的源的属性将看似地覆盖以前的质量。

Object.assign方法只会拷贝源对象自笔者的还要可枚举的属性到指标对象。

群集属性

var o1= {a:1};
var o2 = {b : 2};
var o3 = {c:3};
var obj = Object.assign(o1,o2,o3);
console.log(obj) //{a:1,b:2,c:3};
console.log(o1) //{a:1,b:2,c:3}; 注意目标对象也会发生变化

合併的时候要是具备雷同属性,会依据先后顺序,去覆盖赋值。

原型链上的本性和不可胜计的天性不可复制

var obj = Object.create({foo: 1}, { // foo 在 obj 的原型链上
  bar: {
            value: 2  // bar 是一个不可枚举的属性.
      },
  baz: {
             value: 3,
             enumerable: true  // baz 是 obj 自身的一个可枚举属性
      }
  });

var copy = Object.assign({}, obj);
console.log(copy); // { baz: 3 },原型链上的属性和不可枚举的属性没有复制到

shift(卡塔尔(قطر‎: 删除数组第叁个因素

sort(卡塔尔: 给数组排序

reverse(卡塔尔国: 颠尾数组项在数组中之处

concat: 钦赐的任务上马删除钦命的数组项,而且将去除的数组项创设设成叁个新数组

splice(卡塔尔国: 对四个数组做去除、插入和替换

indexOf(State of Qatar: 早先向后搜索成分在数组中地方

lastIndexOf(State of Qatar: 从后迈入查找成分在数组中地点

forEach、filter:数组迭代

reduce初阶统意气风发,最终为叁个值

reduceRight开头统豆蔻梢头,最后为四个值

数组求和

前不久的用例,假如大家有八个如此的数组:

var arr = [0,1,2,3,4,5,6,7,8,9];

急需将数组中的项值加起来0+1+2+3+4+5+6+7+8+9。大家应有如何做,只怕有何样措施能够兑现。总来说之,正是想艺术让数组项贰个叁个加起来。那是否快要用到数组的迭代呢?是还是不是也得以依赖这几个格局达成数组的求和呢?

for循环和while循环

先是想到的就是那二种循环方法,那在上风度翩翩节也尝试过了。再度啰嗦一下:

// 求和:for循环遍历数组arr {var sum = 0;function getSum{for (var i = 0; i < array.length; i++){sum += parseInt;}return sum;}console.time;for (var i = 0; i < 1000000; i++){sum = 0;getSum;}console.timeEnd; // 7877.155msconsole.log("使用for循环:sum = " + sum); // 45})();
返回列表