Merge the object using typescript












0















In my angular application i am having the data as follows,



  forEachArrayOne = [
{ id: 1, name: "userOne" },
{ id: 2, name: "userTwo" },
{ id: 3, name: "userThree" }
]

forEachArrayTwo = [
{ id: 1, name: "userFour" },
{ id: 2, name: "userFive" },
{ id: 3, name: "userSix" }
]

newObj: any = {};

ngOnInit() {
this.forEachArrayOne.forEach(element => {
this.newObj = { titleOne: "objectOne", dataOne: this.forEachArrayOne };
})

this.forEachArrayTwo.forEach(element => {
this.newObj = { titleTwo: "objectTwo", dataTwo: this.forEachArrayTwo };
})

console.log({ ...this.newObj, ...this.newObj });


}


In my real application, the above is the structure so kindly help me to achieve the expected result in the same way..



The working demo https://stackblitz.com/edit/angular-gyched which has the above structure.



Here console.log(this.newObj) gives the last object,



   titleTwo: "ObjectTwo",
dataTwo:
[
{ id: 1, name: "userFour" },
{ id: 2, name: "userFive" },
{ id: 3, name: "userSix" }
]


but i want to combine both and need the result exactly like the below..



  {
titleOne: "objectOne",
dataOne:
[
{ id: 1, name: "userOne" },
{ id: 2, name: "userTwo" },
{ id: 3, name: "userThree" }
],
titleTwo: "ObjectTwo",
dataTwo:
[
{ id: 1, name: "userFour" },
{ id: 2, name: "userFive" },
{ id: 3, name: "userSix" }
]
}


Kindly help me to achieve the above result.. If i am wrong in anywhere kindly correct with the working example please..










share|improve this question





























    0















    In my angular application i am having the data as follows,



      forEachArrayOne = [
    { id: 1, name: "userOne" },
    { id: 2, name: "userTwo" },
    { id: 3, name: "userThree" }
    ]

    forEachArrayTwo = [
    { id: 1, name: "userFour" },
    { id: 2, name: "userFive" },
    { id: 3, name: "userSix" }
    ]

    newObj: any = {};

    ngOnInit() {
    this.forEachArrayOne.forEach(element => {
    this.newObj = { titleOne: "objectOne", dataOne: this.forEachArrayOne };
    })

    this.forEachArrayTwo.forEach(element => {
    this.newObj = { titleTwo: "objectTwo", dataTwo: this.forEachArrayTwo };
    })

    console.log({ ...this.newObj, ...this.newObj });


    }


    In my real application, the above is the structure so kindly help me to achieve the expected result in the same way..



    The working demo https://stackblitz.com/edit/angular-gyched which has the above structure.



    Here console.log(this.newObj) gives the last object,



       titleTwo: "ObjectTwo",
    dataTwo:
    [
    { id: 1, name: "userFour" },
    { id: 2, name: "userFive" },
    { id: 3, name: "userSix" }
    ]


    but i want to combine both and need the result exactly like the below..



      {
    titleOne: "objectOne",
    dataOne:
    [
    { id: 1, name: "userOne" },
    { id: 2, name: "userTwo" },
    { id: 3, name: "userThree" }
    ],
    titleTwo: "ObjectTwo",
    dataTwo:
    [
    { id: 1, name: "userFour" },
    { id: 2, name: "userFive" },
    { id: 3, name: "userSix" }
    ]
    }


    Kindly help me to achieve the above result.. If i am wrong in anywhere kindly correct with the working example please..










    share|improve this question



























      0












      0








      0








      In my angular application i am having the data as follows,



        forEachArrayOne = [
      { id: 1, name: "userOne" },
      { id: 2, name: "userTwo" },
      { id: 3, name: "userThree" }
      ]

      forEachArrayTwo = [
      { id: 1, name: "userFour" },
      { id: 2, name: "userFive" },
      { id: 3, name: "userSix" }
      ]

      newObj: any = {};

      ngOnInit() {
      this.forEachArrayOne.forEach(element => {
      this.newObj = { titleOne: "objectOne", dataOne: this.forEachArrayOne };
      })

      this.forEachArrayTwo.forEach(element => {
      this.newObj = { titleTwo: "objectTwo", dataTwo: this.forEachArrayTwo };
      })

      console.log({ ...this.newObj, ...this.newObj });


      }


      In my real application, the above is the structure so kindly help me to achieve the expected result in the same way..



      The working demo https://stackblitz.com/edit/angular-gyched which has the above structure.



      Here console.log(this.newObj) gives the last object,



         titleTwo: "ObjectTwo",
      dataTwo:
      [
      { id: 1, name: "userFour" },
      { id: 2, name: "userFive" },
      { id: 3, name: "userSix" }
      ]


      but i want to combine both and need the result exactly like the below..



        {
      titleOne: "objectOne",
      dataOne:
      [
      { id: 1, name: "userOne" },
      { id: 2, name: "userTwo" },
      { id: 3, name: "userThree" }
      ],
      titleTwo: "ObjectTwo",
      dataTwo:
      [
      { id: 1, name: "userFour" },
      { id: 2, name: "userFive" },
      { id: 3, name: "userSix" }
      ]
      }


      Kindly help me to achieve the above result.. If i am wrong in anywhere kindly correct with the working example please..










      share|improve this question
















      In my angular application i am having the data as follows,



        forEachArrayOne = [
      { id: 1, name: "userOne" },
      { id: 2, name: "userTwo" },
      { id: 3, name: "userThree" }
      ]

      forEachArrayTwo = [
      { id: 1, name: "userFour" },
      { id: 2, name: "userFive" },
      { id: 3, name: "userSix" }
      ]

      newObj: any = {};

      ngOnInit() {
      this.forEachArrayOne.forEach(element => {
      this.newObj = { titleOne: "objectOne", dataOne: this.forEachArrayOne };
      })

      this.forEachArrayTwo.forEach(element => {
      this.newObj = { titleTwo: "objectTwo", dataTwo: this.forEachArrayTwo };
      })

      console.log({ ...this.newObj, ...this.newObj });


      }


      In my real application, the above is the structure so kindly help me to achieve the expected result in the same way..



      The working demo https://stackblitz.com/edit/angular-gyched which has the above structure.



      Here console.log(this.newObj) gives the last object,



         titleTwo: "ObjectTwo",
      dataTwo:
      [
      { id: 1, name: "userFour" },
      { id: 2, name: "userFive" },
      { id: 3, name: "userSix" }
      ]


      but i want to combine both and need the result exactly like the below..



        {
      titleOne: "objectOne",
      dataOne:
      [
      { id: 1, name: "userOne" },
      { id: 2, name: "userTwo" },
      { id: 3, name: "userThree" }
      ],
      titleTwo: "ObjectTwo",
      dataTwo:
      [
      { id: 1, name: "userFour" },
      { id: 2, name: "userFive" },
      { id: 3, name: "userSix" }
      ]
      }


      Kindly help me to achieve the above result.. If i am wrong in anywhere kindly correct with the working example please..







      javascript angular typescript object merge






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 19 '18 at 4:16







      Maniraj from Karur

















      asked Nov 18 '18 at 10:27









      Maniraj from KarurManiraj from Karur

      1,0391133




      1,0391133
























          1 Answer
          1






          active

          oldest

          votes


















          2














          You're assigning both values to this.newObj, so it just overwrites the first object.



          Also, there is no need for your loop. It doesn't add anything.



          Instead, you can do:



          this.newObjA = { titleOne: "objectOne", dataOne: this.forEachArrayOne };
          this.newObjB = { titleTwo: "objectTwo", dataTwo: this.forEachArrayTwo };
          console.log({ ...this.newObjA, ...this.newObjB });


          **
          EDIT **



          Having spoken to you regarding your requirements, I can see a different solution.



          Before calling componentData, you need to make sure you have the full data. To do this, we can use forkJoin to join the benchmark requests, and the project requests into one Observable. We can then subscribe to that Observable to get the results for both.



          The code would look something like this:



           createComponent() {
          let benchmarks, projects;
          let form = this.productBenchMarkingForm[0];
          if (form.benchmarking && form.project) {
          benchmarks = form.benchmarking.filter(x => x.optionsUrl)
          .map(element => this.getOptions(element));

          projects = form.project.filter(x => x.optionsUrl)
          .map(element => this.getOptions(element));

          forkJoin(
          forkJoin(benchmarks), // Join all the benchmark requests into 1 Observable
          forkJoin(projects) // Join all the project requests into 1 Observable
          ).subscribe(res => {
          this.componentData({ component: NgiProductComponent, inputs: { config: AppConfig, injectData: { action: "add", titleProject: "project", dataProject: this.productBenchMarkingForm[0] } } });
          })
          }
          }

          getOptions(element) {
          return this.appService.getRest(element.optionsUrl).pipe(
          map((res: any) => {
          this.dataForOptions = res.data;
          element.options = res.data;
          return element;
          })
          )
          }


          Here is an example in Stackblitz that logs the data to the console






          share|improve this answer


























          • But in my project i have structure like this only.. So only i have explained with foreach.. Also mentioned the same in my question that is the structure i am using..

            – Maniraj from Karur
            Nov 18 '18 at 10:43











          • Also i know this solution already but that is not in my case.. I making the code as like in my question...

            – Maniraj from Karur
            Nov 18 '18 at 10:45






          • 1





            Okay, well at the moment your question doesn't give enough information for me to answer. Can you give the actual structure of your data then please? Then maybe I can understand why you need to use a loop.

            – user184994
            Nov 18 '18 at 10:46











          • If not this one possible, Kindly help me how to correct the above code.. Because i am passing the newObj to another component in angular so i need to assign both separate values to the obj and to get in that component..

            – Maniraj from Karur
            Nov 18 '18 at 10:46






          • 1





            Give me a moment will update with my real code..

            – Maniraj from Karur
            Nov 18 '18 at 10:48











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53359869%2fmerge-the-object-using-typescript%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          2














          You're assigning both values to this.newObj, so it just overwrites the first object.



          Also, there is no need for your loop. It doesn't add anything.



          Instead, you can do:



          this.newObjA = { titleOne: "objectOne", dataOne: this.forEachArrayOne };
          this.newObjB = { titleTwo: "objectTwo", dataTwo: this.forEachArrayTwo };
          console.log({ ...this.newObjA, ...this.newObjB });


          **
          EDIT **



          Having spoken to you regarding your requirements, I can see a different solution.



          Before calling componentData, you need to make sure you have the full data. To do this, we can use forkJoin to join the benchmark requests, and the project requests into one Observable. We can then subscribe to that Observable to get the results for both.



          The code would look something like this:



           createComponent() {
          let benchmarks, projects;
          let form = this.productBenchMarkingForm[0];
          if (form.benchmarking && form.project) {
          benchmarks = form.benchmarking.filter(x => x.optionsUrl)
          .map(element => this.getOptions(element));

          projects = form.project.filter(x => x.optionsUrl)
          .map(element => this.getOptions(element));

          forkJoin(
          forkJoin(benchmarks), // Join all the benchmark requests into 1 Observable
          forkJoin(projects) // Join all the project requests into 1 Observable
          ).subscribe(res => {
          this.componentData({ component: NgiProductComponent, inputs: { config: AppConfig, injectData: { action: "add", titleProject: "project", dataProject: this.productBenchMarkingForm[0] } } });
          })
          }
          }

          getOptions(element) {
          return this.appService.getRest(element.optionsUrl).pipe(
          map((res: any) => {
          this.dataForOptions = res.data;
          element.options = res.data;
          return element;
          })
          )
          }


          Here is an example in Stackblitz that logs the data to the console






          share|improve this answer


























          • But in my project i have structure like this only.. So only i have explained with foreach.. Also mentioned the same in my question that is the structure i am using..

            – Maniraj from Karur
            Nov 18 '18 at 10:43











          • Also i know this solution already but that is not in my case.. I making the code as like in my question...

            – Maniraj from Karur
            Nov 18 '18 at 10:45






          • 1





            Okay, well at the moment your question doesn't give enough information for me to answer. Can you give the actual structure of your data then please? Then maybe I can understand why you need to use a loop.

            – user184994
            Nov 18 '18 at 10:46











          • If not this one possible, Kindly help me how to correct the above code.. Because i am passing the newObj to another component in angular so i need to assign both separate values to the obj and to get in that component..

            – Maniraj from Karur
            Nov 18 '18 at 10:46






          • 1





            Give me a moment will update with my real code..

            – Maniraj from Karur
            Nov 18 '18 at 10:48
















          2














          You're assigning both values to this.newObj, so it just overwrites the first object.



          Also, there is no need for your loop. It doesn't add anything.



          Instead, you can do:



          this.newObjA = { titleOne: "objectOne", dataOne: this.forEachArrayOne };
          this.newObjB = { titleTwo: "objectTwo", dataTwo: this.forEachArrayTwo };
          console.log({ ...this.newObjA, ...this.newObjB });


          **
          EDIT **



          Having spoken to you regarding your requirements, I can see a different solution.



          Before calling componentData, you need to make sure you have the full data. To do this, we can use forkJoin to join the benchmark requests, and the project requests into one Observable. We can then subscribe to that Observable to get the results for both.



          The code would look something like this:



           createComponent() {
          let benchmarks, projects;
          let form = this.productBenchMarkingForm[0];
          if (form.benchmarking && form.project) {
          benchmarks = form.benchmarking.filter(x => x.optionsUrl)
          .map(element => this.getOptions(element));

          projects = form.project.filter(x => x.optionsUrl)
          .map(element => this.getOptions(element));

          forkJoin(
          forkJoin(benchmarks), // Join all the benchmark requests into 1 Observable
          forkJoin(projects) // Join all the project requests into 1 Observable
          ).subscribe(res => {
          this.componentData({ component: NgiProductComponent, inputs: { config: AppConfig, injectData: { action: "add", titleProject: "project", dataProject: this.productBenchMarkingForm[0] } } });
          })
          }
          }

          getOptions(element) {
          return this.appService.getRest(element.optionsUrl).pipe(
          map((res: any) => {
          this.dataForOptions = res.data;
          element.options = res.data;
          return element;
          })
          )
          }


          Here is an example in Stackblitz that logs the data to the console






          share|improve this answer


























          • But in my project i have structure like this only.. So only i have explained with foreach.. Also mentioned the same in my question that is the structure i am using..

            – Maniraj from Karur
            Nov 18 '18 at 10:43











          • Also i know this solution already but that is not in my case.. I making the code as like in my question...

            – Maniraj from Karur
            Nov 18 '18 at 10:45






          • 1





            Okay, well at the moment your question doesn't give enough information for me to answer. Can you give the actual structure of your data then please? Then maybe I can understand why you need to use a loop.

            – user184994
            Nov 18 '18 at 10:46











          • If not this one possible, Kindly help me how to correct the above code.. Because i am passing the newObj to another component in angular so i need to assign both separate values to the obj and to get in that component..

            – Maniraj from Karur
            Nov 18 '18 at 10:46






          • 1





            Give me a moment will update with my real code..

            – Maniraj from Karur
            Nov 18 '18 at 10:48














          2












          2








          2







          You're assigning both values to this.newObj, so it just overwrites the first object.



          Also, there is no need for your loop. It doesn't add anything.



          Instead, you can do:



          this.newObjA = { titleOne: "objectOne", dataOne: this.forEachArrayOne };
          this.newObjB = { titleTwo: "objectTwo", dataTwo: this.forEachArrayTwo };
          console.log({ ...this.newObjA, ...this.newObjB });


          **
          EDIT **



          Having spoken to you regarding your requirements, I can see a different solution.



          Before calling componentData, you need to make sure you have the full data. To do this, we can use forkJoin to join the benchmark requests, and the project requests into one Observable. We can then subscribe to that Observable to get the results for both.



          The code would look something like this:



           createComponent() {
          let benchmarks, projects;
          let form = this.productBenchMarkingForm[0];
          if (form.benchmarking && form.project) {
          benchmarks = form.benchmarking.filter(x => x.optionsUrl)
          .map(element => this.getOptions(element));

          projects = form.project.filter(x => x.optionsUrl)
          .map(element => this.getOptions(element));

          forkJoin(
          forkJoin(benchmarks), // Join all the benchmark requests into 1 Observable
          forkJoin(projects) // Join all the project requests into 1 Observable
          ).subscribe(res => {
          this.componentData({ component: NgiProductComponent, inputs: { config: AppConfig, injectData: { action: "add", titleProject: "project", dataProject: this.productBenchMarkingForm[0] } } });
          })
          }
          }

          getOptions(element) {
          return this.appService.getRest(element.optionsUrl).pipe(
          map((res: any) => {
          this.dataForOptions = res.data;
          element.options = res.data;
          return element;
          })
          )
          }


          Here is an example in Stackblitz that logs the data to the console






          share|improve this answer















          You're assigning both values to this.newObj, so it just overwrites the first object.



          Also, there is no need for your loop. It doesn't add anything.



          Instead, you can do:



          this.newObjA = { titleOne: "objectOne", dataOne: this.forEachArrayOne };
          this.newObjB = { titleTwo: "objectTwo", dataTwo: this.forEachArrayTwo };
          console.log({ ...this.newObjA, ...this.newObjB });


          **
          EDIT **



          Having spoken to you regarding your requirements, I can see a different solution.



          Before calling componentData, you need to make sure you have the full data. To do this, we can use forkJoin to join the benchmark requests, and the project requests into one Observable. We can then subscribe to that Observable to get the results for both.



          The code would look something like this:



           createComponent() {
          let benchmarks, projects;
          let form = this.productBenchMarkingForm[0];
          if (form.benchmarking && form.project) {
          benchmarks = form.benchmarking.filter(x => x.optionsUrl)
          .map(element => this.getOptions(element));

          projects = form.project.filter(x => x.optionsUrl)
          .map(element => this.getOptions(element));

          forkJoin(
          forkJoin(benchmarks), // Join all the benchmark requests into 1 Observable
          forkJoin(projects) // Join all the project requests into 1 Observable
          ).subscribe(res => {
          this.componentData({ component: NgiProductComponent, inputs: { config: AppConfig, injectData: { action: "add", titleProject: "project", dataProject: this.productBenchMarkingForm[0] } } });
          })
          }
          }

          getOptions(element) {
          return this.appService.getRest(element.optionsUrl).pipe(
          map((res: any) => {
          this.dataForOptions = res.data;
          element.options = res.data;
          return element;
          })
          )
          }


          Here is an example in Stackblitz that logs the data to the console







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 18 '18 at 15:08

























          answered Nov 18 '18 at 10:40









          user184994user184994

          11.3k11828




          11.3k11828













          • But in my project i have structure like this only.. So only i have explained with foreach.. Also mentioned the same in my question that is the structure i am using..

            – Maniraj from Karur
            Nov 18 '18 at 10:43











          • Also i know this solution already but that is not in my case.. I making the code as like in my question...

            – Maniraj from Karur
            Nov 18 '18 at 10:45






          • 1





            Okay, well at the moment your question doesn't give enough information for me to answer. Can you give the actual structure of your data then please? Then maybe I can understand why you need to use a loop.

            – user184994
            Nov 18 '18 at 10:46











          • If not this one possible, Kindly help me how to correct the above code.. Because i am passing the newObj to another component in angular so i need to assign both separate values to the obj and to get in that component..

            – Maniraj from Karur
            Nov 18 '18 at 10:46






          • 1





            Give me a moment will update with my real code..

            – Maniraj from Karur
            Nov 18 '18 at 10:48



















          • But in my project i have structure like this only.. So only i have explained with foreach.. Also mentioned the same in my question that is the structure i am using..

            – Maniraj from Karur
            Nov 18 '18 at 10:43











          • Also i know this solution already but that is not in my case.. I making the code as like in my question...

            – Maniraj from Karur
            Nov 18 '18 at 10:45






          • 1





            Okay, well at the moment your question doesn't give enough information for me to answer. Can you give the actual structure of your data then please? Then maybe I can understand why you need to use a loop.

            – user184994
            Nov 18 '18 at 10:46











          • If not this one possible, Kindly help me how to correct the above code.. Because i am passing the newObj to another component in angular so i need to assign both separate values to the obj and to get in that component..

            – Maniraj from Karur
            Nov 18 '18 at 10:46






          • 1





            Give me a moment will update with my real code..

            – Maniraj from Karur
            Nov 18 '18 at 10:48

















          But in my project i have structure like this only.. So only i have explained with foreach.. Also mentioned the same in my question that is the structure i am using..

          – Maniraj from Karur
          Nov 18 '18 at 10:43





          But in my project i have structure like this only.. So only i have explained with foreach.. Also mentioned the same in my question that is the structure i am using..

          – Maniraj from Karur
          Nov 18 '18 at 10:43













          Also i know this solution already but that is not in my case.. I making the code as like in my question...

          – Maniraj from Karur
          Nov 18 '18 at 10:45





          Also i know this solution already but that is not in my case.. I making the code as like in my question...

          – Maniraj from Karur
          Nov 18 '18 at 10:45




          1




          1





          Okay, well at the moment your question doesn't give enough information for me to answer. Can you give the actual structure of your data then please? Then maybe I can understand why you need to use a loop.

          – user184994
          Nov 18 '18 at 10:46





          Okay, well at the moment your question doesn't give enough information for me to answer. Can you give the actual structure of your data then please? Then maybe I can understand why you need to use a loop.

          – user184994
          Nov 18 '18 at 10:46













          If not this one possible, Kindly help me how to correct the above code.. Because i am passing the newObj to another component in angular so i need to assign both separate values to the obj and to get in that component..

          – Maniraj from Karur
          Nov 18 '18 at 10:46





          If not this one possible, Kindly help me how to correct the above code.. Because i am passing the newObj to another component in angular so i need to assign both separate values to the obj and to get in that component..

          – Maniraj from Karur
          Nov 18 '18 at 10:46




          1




          1





          Give me a moment will update with my real code..

          – Maniraj from Karur
          Nov 18 '18 at 10:48





          Give me a moment will update with my real code..

          – Maniraj from Karur
          Nov 18 '18 at 10:48


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53359869%2fmerge-the-object-using-typescript%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          這個網誌中的熱門文章

          Tangent Lines Diagram Along Smooth Curve

          Yusuf al-Mu'taman ibn Hud

          Zucchini