배열이 주어지면 [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;
}