[javascript] 숫자 배열의 합을 찾는 방법

배열이 주어지면 [1, 2, 3, 4]요소의 합계를 어떻게 찾을 수 있습니까? (이 경우 합계는입니다 10.)

$.each유용 하다고 생각 했지만 구현 방법을 잘 모르겠습니다.



답변

권장 (기본값으로 줄임)

Array.prototype.reduce 는 현재 요소 값을 이전 요소 값의 합계에 더하여 배열을 반복하는 데 사용할 수 있습니다.

console.log(
  [1, 2, 3, 4].reduce((a, b) => a + b, 0)
)
console.log(
  [].reduce((a, b) => a + b, 0)
)

기본값없이

TypeError가 발생합니다

console.log(
  [].reduce((a, b) => a + b)
)

ES6의 화살표 기능 이전

console.log(
  [1,2,3].reduce(function(acc, val) { return acc + val; }, 0)
)

console.log(
  [].reduce(function(acc, val) { return acc + val; }, 0)
)

숫자가 아닌 입력

숫자가 아닌 입력이 가능한 경우 처리 할 수 ​​있습니까?

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 코드의 문자열 표현을 실행할 수 있습니다 . Array.prototype.join 함수를 사용하여 배열을 문자열로 변환하면 [1,2,3]이 “1 + 2 + 3″으로 변경되어 6으로 평가됩니다.

console.log(
  eval([1,2,3].join('+'))
)

//This way is dangerous if the array is built
// from user input as it may be exploited eg: 

eval([1,"2;alert('Malicious code!')"].join('+'))

물론 경고를 표시하는 것이 일어날 수있는 최악의 일은 아닙니다. 내가 이것을 포함시킨 유일한 이유는 그것이 명확하지 않다고 생각하기 때문에 Ortund의 질문에 대한 답변입니다.


답변

에서 리스프 에 대해 정확하게 작업 할 수 this’d reduce. 이런 종류의 코드가 표시됩니다.

(reduce #'+ '(1 2 3)) ; 6

다행히도 JavaScript에는 우리도 있습니다 reduce! 불행히도, +함수가 아닌 연산자입니다. 그러나 우리는 그것을 예쁘게 만들 수 있습니다! 여기를보십시오 :

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

예쁘지 않습니까? 🙂

더 나은! ECMAScript 2015 (일명 ECMAScript 6 )를 사용하는 경우 다음 과 같이 될 수 있습니다.

const sum = [1, 2, 3].reduce((partial_sum, a) => partial_sum + a,0);
console.log(sum); // 6


답변

왜 줄이지 않습니까? 일반적으로 약간의 카운터 직관적이지만 합계를 찾기 위해 사용하는 것은 매우 간단합니다.

var a = [1,2,3];
var sum = a.reduce(function(a, b) { return a + b; }, 0);


답변

var arr = [1,2,3,4];
var total=0;
for(var i in arr) { total += arr[i]; }


답변

var total = 0;
$.each(arr,function() {
    total += this;
});


답변

Lodash를 사용하는 경우 sum 함수를 사용할 수 있습니다

array = [1, 2, 3, 4];
sum = _.sum(array); // sum == 10


답변

이것은 모든 항목을 반복하고 각 반복에서 항목을- sum변수 에 추가하여 가능합니다 .

var array = [1, 2, 3];

for (var i = 0, sum = 0; i < array.length; sum += array[i++]);

JavaScript는 블록 범위를 알지 못하므로 접근 sum할 수 있습니다.

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;
}