숫자 배열의 합계를 구하는 방법
된 배열 " " "[1, 2, 3, 4]
합은 어떻게 알 수 있을까요? , , , , , , , , , , , , , , 이 경우 은 (이 경우, , , , , , , , , , , , )가 됩니다10
유용하다고 생각했는데 어떻게 구현해야 할지 모르겠어요.
이 일이 딱 맞는 것 같아reduce
.
ECMAScript 2015(ECMAScript 6이라고도 함)를 사용하는 경우:
const sum = [1, 2, 3].reduce((partialSum, a) => partialSum + a, 0);
console.log(sum); // 6
이전 JS의 경우:
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
예쁘죠? :-)
권장(디폴트값으로 감소
Array.protype.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.protype을 사용합니다.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의 질문에 대한 답변으로서 그것이 명확해졌다고 생각하지 않기 때문이다.
왜 줄이지 않는가?일반적으로는 약간 반감이 있지만, 합계를 찾는 데 사용하는 것은 매우 간단합니다.
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;
});
나처럼 기능하는 오네라이너를 찾는 사람?
전제 조건:
const arr = [1, 2, 3, 4];
다음은 현대 JS용 오넬라이너입니다.
sum = arr.reduce((a, b) => a + b, 0);
(화살표 기능이 없는 오래된 IE를 지원해야 하는 경우:
sum = arr.reduce(function (a, b) {return a + b;}, 0);
여기서 0은 초기값이므로 필요에 따라 오프셋으로 사용할 수 있습니다.또한 이 초기값이 필요합니다.그렇지 않으면 빈 배열로 함수를 호출하면 오류가 발생합니다.
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;
}
arr.reduce(function (a, b) {
return a + b;
});
예를 들어, 다음과 같은 어레이가 있다고 가정해 보겠습니다.
const arr = [1, 2, 3, 4];
포괄적인 답변을 찾을 수 없었기 때문에 다양한 방법을 알아보겠습니다.
1) 빌트인 reduce() 사용
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 loop 사용
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;
};
이렇게 불러주세요.
total(arr); //return 10
어레이에는 이러한 시제품을 사용하지 않는 것이 좋습니다.
reduceRight를 사용할 수도 있습니다.
[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
재미있는 접근법:
eval([1,2,3].join("+"))
표준 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 */
이것으로 충분합니다(결과는 5가 됩니다.이런 해결책에 숨겨진 단점이 없기를 바랍니다.
저는 JavaScript와 코딩은 초보자이지만 배열 내의 숫자를 단순하고 쉽게 합칠 수 있는 방법은 다음과 같습니다.
var myNumbers = [1,2,3,4,5]
var total = 0;
for(var i = 0; i < myNumbers.length; i++){
total += myNumbers[i];
}
기본적으로는 빌트인 기능을 사용하지 않는 솔루션이 별로 없고 쓰기 쉽고 이해하기 쉽기 때문에 기여하고 싶었습니다.
다음 코드를 사용해 볼 수 있습니다.
[1, 2, 3, 4].reduce((pre,curr)=>pre+curr,0)
사용하다for
디세이블로그:
const array = [1, 2, 3, 4];
let result = 0;
for (let i = 0; i < array.length - 1; i++) {
result += array[i];
}
console.log(result); // Should give 10
또는 심지어forEach
디세이블로그:
const array = [1, 2, 3, 4];
let result = 0;
array.forEach(number => {
result += number;
})
console.log(result); // Should give 10
쉽게 하려면 , 「」를 합니다.reduce
:
const array = [10, 20, 30, 40];
const add = (a, b) => a + b
const result = array.reduce(add);
console.log(result); // Should give 100
몇몇 사람들은 이 웹 사이트를.sum()
의 메서드Array.prototype
이것은 일반적으로 나쁜 관행으로 간주되기 때문에 당신에게 그것을 하라고 권하는 것은 아닙니다.
그래도 계속 그렇게 해야 한다면, 다음과 같이 간단하게 기술할 수 있습니다.
Array.prototype.sum = function() {return [].reduce.call(this, (a,i) => a+i, 0);}
'어,어,어,어,어,어,어,어,어,어,어,어,어,어,어,어,어.[1,2].sum(); // 3
프로토타입에 추가된 기능은 ES5 및 ES6 기능과 화살표 구문을 혼합하여 사용합니다.function
가 Method "Private" 를 할 수 됩니다.this
를 참조해 주세요.Array
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★=>
하게 하기 위해reduce
discl.discl.discl을 클릭합니다.
ES6:의
let total = 0;
for (let value of [1, 2, 3, 4]) {
total += value;
}
JavaScript 코드의 짧은 조각으로 다음 작업을 수행할 수 있습니다.
var numbers = [1,2,3,4];
var totalAmount = 0;
for (var x = 0; x < numbers.length; x++) {
totalAmount += numbers[x];
}
console.log(totalAmount); //10 (1+2+3+4)
var totally = eval(arr.join('+'))
이렇게 하면 온갖 이국적인 것들을 배열에 넣을 수 있습니다.
var arr = ['(1/3)','Date.now()','foo','bar()',1,2,3,4]
농담 반이에요.
reduce
let arr = [1, 2, 3, 4];
let sum = arr.reduce((v, i) => (v + i));
console.log(sum);
""는 필요 .initial value
'아니오'가 없다면initial value
'''가 이루어짐,callback function
첫 번째 "이러한 요소"로 됩니다.initial value
. 매우 cOOL 기능:)
[1, 2, 3, 4].reduce((a, x) => a + x) // 10
[1, 2, 3, 4].reduce((a, x) => a * x) // 24
[1, 2, 3, 4].reduce((a, x) => Math.max(a, x)) // 4
[1, 2, 3, 4].reduce((a, x) => Math.min(a, x)) // 1
스택 알고리즘을 사용하는 우아한 원라이너 솔루션을 소개합니다.다만, 이 실장의 메리트를 이해하는 데는 시간이 걸릴 수 있습니다.
const getSum = arr => (arr.length === 1) ? arr[0] : arr.pop() + getSum(arr);
getSum([1, 2, 3, 4, 5]) //15
기본적으로 이 함수는 어레이를 받아들이고 어레이에 정확히 하나의 항목이 포함되어 있는지 확인합니다.false일 경우 스택에서 마지막 항목을 팝업하고 업데이트된 어레이를 반환합니다.
이 스니펫의 장점은 함수가 다음을 포함한다는 것입니다.arr[0]
이치노마지막 항목에 도달하면 전체 금액을 반환합니다.
정확성.
배열 및 시작 합계를 최소 수치로 정렬합니다(스니펫은 비소트와의 차이를 나타냄).
[...arr].sort((a,b)=>a-b).reduce((a,c)=>a+c,0)
arr=[.6,9,.1,.1,.1,.1]
sum = arr.reduce((a,c)=>a+c,0)
sortSum = [...arr].sort((a,b)=>a-b).reduce((a,c)=>a+c,0)
console.log('sum: ',sum);
console.log('sortSum:',sortSum);
console.log('sum==sortSum :', sum==sortSum);
// we use .sort((a,b)=>a-b) instead .sort() because
// that second one treat elements like strings (so in wrong way)
// e.g [1,10,9,20,93].sort() --> [1, 10, 20, 9, 93]
다차원 숫자 배열의 경우 사용arr.flat(Infinity)
arr= [ [ [1,2,3,4],[1,2,3,4],[1,2,3,4] ],
[ [1,2,3,4],[1,2,3,4],[1,2,3,4] ] ];
sum = arr.flat(Infinity).reduce((a,c)=> a+c,0);
console.log(sum); // 60
정말 좋은 답입니다만, 질문(1,2,3,4)과 같이 숫자가 순서대로 되어 있는 경우는, (n*(n+1)/2를 적용하면 간단하게 할 수 있습니다.여기서 n은 마지막 숫자입니다.
reduce() 메서드를 람다 식과 조합할 수 있습니다.
[1, 2, 3, 4].reduce((accumulator, currentValue) => accumulator + currentValue);
reduce() 포함
[1, 2, 3, 4].reduce((a, b) => a + b, 0); // 10
With For Each()
let sum = 0;
[1, 2, 3, 4].forEach(n => sum += n);
sum; // 10
파라미터 포함
function arrSum(arr) {
sum = 0;
arr.forEach(n => sum += n);
return sum;
}
arrSum([1, 2, 3, 4]) // 10
나는 모든 답이 '불필요한' 해결책으로 가는 것을 보았다.
var array = [1,2,3,4]
var total = 0
for (var i = 0; i < array.length; i++) {
total += array[i]
}
console.log(total)
매우 단순한
스텝 1은 다음과 같은 어레이가 필요합니다.
const arrayNumber = [500,152,154,1555,12445];
스텝 2(이 스텝은 무시해도 됩니다)스텝은 테이블 내의 모든 값이 다음 값을 나타내는 수치입니다.
let newArray = [];
for (let i = 0; i < arrayNumber.length; i++) {
newArray.push(parseInt(arrayNumber[i], 10));
}
순서 3
const sumInArray = dataData.reduce( (a, b) => a + b);
마침내.
console.log(sumInArray);
기본 프로세스를 이해하기 위한 가장 간단한 답변:
let array = [10, 20, 30, 40, 50]
let total = 0
for(let i in array)
{
total += array[i]
}
console.log(total)
기본 프로세스에 대해 이미 잘 알고 있다면 임베디드 방식으로 시간을 절약할 수 있습니다.
let array = [10, 20, 30, 40, 50]
let total = array.reduce((x, y) => x + y)
console.log(total)
언급URL : https://stackoverflow.com/questions/1230233/how-to-find-the-sum-of-an-array-of-numbers
'programing' 카테고리의 다른 글
"잘못된 조작예외: MySqlConnection에서 연결이 유효하고 열려 있어야 합니다." (0) | 2022.10.01 |
---|---|
jQuery: Ajax 호출 성공 후 데이터 반환 (0) | 2022.10.01 |
MySQL이 n일 전 날짜를 타임스탬프로 가져옵니다. (0) | 2022.10.01 |
Docker-compose up : 서버 API 버전을 가져오는 동안 오류가 발생했습니다('연결 중단됨', ConnectionRefusedError(61, '연결 거부'). (0) | 2022.10.01 |
한 번에 구분 기호를 사용하여 문자열 목록 요소 결합 (0) | 2022.10.01 |