graylobo
527
2021-08-20 16:21:04
4
165

JS Reduce 함수의 인자로 받는 콜백메서드의 원형에 대한 궁금증


JS 배열에서 제공하는 reduce함수의 동작 메커니즘은 알고있는데요, 

해당 함수에서 인자로 받는 콜백메서드에 대해 헷갈리는게 있어서 질문드립니다

JS Code

type SomeObject ={
    [key:string]: string|number;
};

const someObjects : SomeObject[] =[
    {border:"none"},
    {fontSize :24},
    {className:"sm-box"}
];

const someObject : SomeObject = someObjects.reduce((a:SomeObject,b:SomeObject)=>({...a,...b}),{});

위 reduce함수는 콜백메서드를 받는데

콜백메서드의 원형을 보면 인자2개(a,b)를 받고 ({...a,...b}),{}) 총 2개의 값을 리턴해주는데

=> 뒤에는 한개의 return값만 올수있는게 아닌가요?

C#으로 동일하게 구현해보려고했는데 아래처럼 C#코드처럼

리턴을 2개 해주는 튜플방식을 사용하는걸까요?


using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    class Program
    {
        static async Task Main(string[] args)
        {
            int[] some = { 1,2,3};
            var ss = some.Reduce((a, b) => ((a + b), 0));
            Console.ReadLine();
        }
    }

    public static class Extension
    {
        public static (T,T) Reduce<T>(this IEnumerable<T> some, Func<T, T, (T,T)> callBack)
        {
            (T,T) somes = default;
            foreach (var item in some)
            {
                somes = callBack(item, item);
            }
            return somes;
        }
    }

}



0
  • 답변 4

  • ISA
    5k
    2021-08-20 16:37:11
    초기값은 do 같은 존재...
    자세한 내용은 mdn reduce 폴리필 항목을 보시면 자세히 나옵니다.
  • 초보자1212
    2k
    2021-08-20 18:08:57

    괄호 때매 헷갈리신듯요


    (a:SomeObject,b:SomeObject)=>({...a,...b})

    이 구문은



    (a:SomeObject,b:SomeObject)=> {
      return {...a, ...b};
    }

    와 같습니다

  • graylobo
    527
    2021-08-23 10:27:27


    (a:SomeObject,b:SomeObject)=>({...a,...b})
    (a:SomeObject,b:SomeObject)=> {
      return {...a, ...b};
    }

    위 구문이 변환하는 부분은 알겠는데

    ((a:SomeObject,b:SomeObject)=>({...a,...b}),{})

    제가 질문한 코드는 위처럼 => 뒤에 ({...a,...b}) 뿐 아니라 {} 까지 붙어있어서요

    return {...a,..b}, {} 로 해석되는건 아닐거같아서요

  • 초보자1212
    2k
    2021-08-24 13:05:17

    reduce 의 mdn 을 한 번 살펴보시는게 좋겠어요.

    뒤에 오는 {} 는 a 에 들어갈 초기 값입니다

  • 로그인을 하시면 답변을 등록할 수 있습니다.