주어진 배열에서 ' [1, 2, 3, 4]' 어떻게 다운로드합니까 요소를 모두 합친? (이 경우, 이 액수는 약간만이라도 '10').
생각해봤죠 '$ 그레이크' # 39 m 확신하지 못하고 있지만, 이를 구현하는 방법을 I& 도움이 될 것입니다.
[1], [리스프] 에 대해 작업을 절감하십시오 this& # 39; d '정확히'. D 지켜보리니 you& # 39 이 같은 코드:
<! - 언어: lisp - >.
(reduce #'+ '(1 2 3)) ; 6
다행히 JavaScript 로, 우리도 '감소'! 죄송합니다. '+' 가 아닌 연산자에서 함수. 할 수 있도록 할 수 없다! 여기서 여바바:
const sum = [1, 2, 3].reduce(add,0); // with initial value to avoid when the array is empty
function add(accumulator, a) {
return accumulator + a;
}
console.log(sum); // 6
더 좋다! # 39 you& 사용하는 경우, re), 2015년, 빨리 ECMAScript& (lc-fc [ECMAScript&, nbsp; 6] [3]) 이 예쁜 수 있습니다.
const sum = [1, 2, 3].reduce((partial_sum, a) => partial_sum + a,0);
console.log(sum); // 6
[1]: http://en.wikipedia.org/wiki/Lisp_% 28programming_language% 29
[3]: https://en.wikipedia.org/wiki/ECMAScript # Harmony.2C_6th_Edition
아리스프로토티페이레두스 현재 어레이이며 반복할 데 사용할 수 있는 추가 요소를 더한 값을 이전 요소점 값.
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. 참 - >.
console.log(
[1, 2, 3, 4].reduce((a, b) => a + b, 0)
)
console.log(
[].reduce((a, b) => a + b, 0)
)
끝 - < 스니핏 >;!
You get a TypeError <! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. 참 - >. <! - 언어: > js 랭 -; 콘솔드로그 ( [] 트레더스 ((a, b) = >. a + b) ) 끝 - < 스니핏 >;!
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. 참 - >. <! - 언어: > js 랭 -; 콘솔드로그 ( [1.2,3] 트레더스 (함수 (acc, val) {반품하십시오 acc + 발. }, 0) )
console.log(
[].reduce(function(acc, val) { return acc + val; }, 0)
)
끝 - < 스니핏 >;!
만약 비 번호 투입물 잘 처리할 수 있다 할 수 있습니다. <! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. 참 - >.
console.log(
["hi", 1, 2, "frog"].reduce((a, b) => a + b)
)
let numOr0 = n => isNaN(n) ? 0 : n
console.log(
["hi", 1, 2, "frog"].reduce((a, b) =>
numOr0(a) + numOr0(b))
)
끝 - < 스니핏 >;!
Eval 우리는 문자열으로 나타내줍니다 JavaScript 코드를 실행하는 데 사용할 수 있습니다. 우리는 함수를 사용하여 변환하십시오 아리스프로토리피스조이너 어레이로의 문자열이어야 [1.2,3] 에 있는 1+2+3" 변경하십시오 ", 로 평가되는 6.
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. 참 - >.
console.log(
eval([1,2,3].join('+'))
)
//This 운행에서어떠한 경우 편차란 어레이입니다 위험하다 예를 들면 활용할 수 있을 수 있으므로 사용자 입력을 통해 //
eval ([1, ", 2, 경보 (& # 39, 악성 코드! & # 39;) "] 스타인 (& # 39, +& # 39;)
끝 - < 스니핏 >;!
물론, t # 39 경고를 디스플레이하여 isn& 최악의 심아이엔큐 문제가 발생할 수 있습니다. # 39 의 유일한 이유는 이 질문에 답을 Ortund& 가 포함되어 있다) 로 나는한다 전송되었기 것이라고 생각하지 않는다.
이것이 가능한 모든 항목을 추가하고 루프을 의해 그들을 통해 각 이터레이션에 맞추기바인딩 '합' 변수.
var array = [1, 2, 3];
for (var i = 0, sum = 0; i < array.length; sum += array[i++]);
console.log(sum); // => 6
그러나 위와 같은 간단한 함수를 응벌을 주석 및 있다.
function sumArray(array) {
for (
var
index = 0, // The iterator
length = array.length, // Cache the array length
sum = 0; // The total amount
index < length; // The "for"-loop condition
sum += array[index++] // Add number on each iteration
);
return sum;
}
로다시 발생할 경우 사용할 수 있는 [합] [1] 기능을 사용할 수 있습니다.
array = [1, 2, 3, 4];
sum = _.sum(array); // sum == 10
[1]: https://lodash.com/docs # 합
// Given array 'arr'
var i = arr.length;
var sum = 0;
while (--i) sum += arr[i];
이렇게 하면 시행하십시오 (측정했습니다 1000년 비해 평균 1.57 ms / 실행하십시오 실행됩니 배열입니다 100mb/s 임의적입니까 일반 숫자임) 에 비해 3.604 ms / 위 / ms / 실행하십시오 2.151 eval () '와' 실행하십시오 방법을 통해 표준으로 루프지 (i, 길이 ++)
방법론뿐만 참고: 이 시험은 javascript engine) 는 구글 앱스 스크립트입니다 실행되는 서버 그러니 그들의 꽤 많은 동일합니까 크롬.
편집: '-i' 대신 '각' (i - 는 1.7) 실행하십시오 절약합니다 난 0.12 밀리초입니다
편집: 이 모든 게시물로의 절감하십시오 () 메서드를 사용하여 신성 조어, 신경 쓰지마. # 39 에 앞서 언급한 it& ms/run. 1 개만
레두스라이트 사용할 수도 있습니다.
[1,2,3,4,5,6].reduceRight(function(a,b){return a+b;})
어떤 결과를 출력할 21.
참조: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/ReduceRight
그래, 이 어레이입니다 상상할 수 있어야 합니다. (아래 참조).
const arr = [1, 2, 3, 4];
1) 기능을 기본 절감하십시오 ()
function total(arr) {
if(!Array.isArray(arr)) return;
return arr.reduce((a, v)=>a + v);
}
2) 을 사용하여 루프를
function total(arr) {
if(!Array.isArray(arr)) return;
let totalNumber = 0;
for (let i=0,l=arr.length; i<l; i++) {
totalNumber+=arr[i];
}
return totalNumber;
}
3) 를 while 루프
function total(arr) {
if(!Array.isArray(arr)) return;
let totalNumber = 0, i=-1;
while (++i < arr.length) {
totalNumber+=arr[i];
}
return totalNumber;
}
4) 를 어레이입니다 포리치
function total(arr) {
if(!Array.isArray(arr)) return;
let sum=0;
arr.forEach(each => {
sum+=each;
});
return sum;
};
및 call it 다음과 같습니다.
total(arr); //return 10
표준 JavaScript 해결책:
var addition = [];
addition.push(2);
addition.push(3);
var total = 0;
for (var i = 0; i < addition.length; i++)
{
total += addition[i];
}
alert(total); // Just to output an example
/* console.log(total); // Just to output an example with Firebug */
이 방법은 me (결과는 제공하십시오 5). 이런 불이익을 솔루션이므로 은선제거 좁히어 가 됐으면 좋겠다 "고 말했다.
나는 초급 및 코딩 일반적으로 JavaScript 와 쉽고 간단한 것으로, 하지만 난 이 숫자를 요약하자면 배열은 다음과 같습니다.
var myNumbers = [1,2,3,4,5]
var total = 0;
for(var i = 0; i < myNumbers.length; i++){
total += myNumbers[i];
}
이 때문에 나는 내가 원하는 많은 기여를 할 수 있는 솔루션을 사용하여, t, t 지켜보리니 didn& # 39 이 방법을 쓸 빌트인 함수들 그리고 don& # 39 는 쉽게 이해하고 있습니다.
const getSum = arr => (arr.length === 1) ? arr[0] : arr.pop() + getSum(arr);
getSum([1, 2, 3, 4, 5]) //15
기본적으로 어레이에서는 및 검사 기능을 사용할 수 있는 한 항목씩 나열할지 어레이입니다 당근이지를 포함되어 있습니다. 이 경우, 팝 마지막 항목은 거짓값 스태킹하고 빼냅니다 반품해야 업데이트되도록 어레이입니다.
[0] '는' 이 스니핏을 아름다움을 위해 해당 함수가 dm_ownerdm_owner 도착 확인 무한 반복. 마지막 항목, it 에 도달하면 되돌려줍니다 전체 합.
몇 명이 제안됩니다 추가에는 이섬 () '방식을' 이 '아리스프로토티페'. 이는 잘못된 관행 때문에 그렇게 하지 않을 것이라는 I& # 39 m, 효시로 여겨지고 있다.
그래도 그렇게 준수하십시오 어졌다면 이는 간결하고 먹어서나 방법이 없다.
Array.prototype.sum = function() {return [].reduce.call(this, (a,i) => a+i, 0);}
그럼. ' [1.2] 이섬 (); 3 '//
참고로, 기능이 추가된 기능 및 원형 (prototype) 은 es5 혼합해서 사용 및 es6 누르십시보 구문. '이' 기능을 할 수 있는 방법을 '에서' 이 '컨텍스트로 선언된 내려받습니다 어레이입니다' 을 운영, re you& # 39 의. 내가 '=', '에 대해 간략하게 > 사용한' 내부의 절감하십시오 가능하다.