Mapping object values from one object to another












4














I have an object called defaultOptions and a function that accepts as an argument an object called newValues meant to override the values in defaultOptions with its own. The values that are not specified in newValues should remain default.



var configOptions = {
isActive: false,
name: "",
description: "",
category: "",
group: "default"
}

publishOptions: function(newValues){
$.each(newValues, function(key, value){
if(configOptions.hasOwnProperty(key)){
configOptions[key] = value;
}
else{
configOptions[key] = value;
}
});
console.log(configOptions);
}


For example, if I use this method like so:



var myOptions = {
name: "option one",
category: "the best"
}

publishOptions(myOptions)


I would expect configOptions to look like this:



configOptions = {
isActive: false,
name: "option one",
description: "",
category: "the best",
group: "default"
}


I'm using jQuery's each method to map the values from newValues to configOptions, but I suspect there is a much more succinct and elegant way to do this. I would appreciate any suggestions.










share|improve this question





























    4














    I have an object called defaultOptions and a function that accepts as an argument an object called newValues meant to override the values in defaultOptions with its own. The values that are not specified in newValues should remain default.



    var configOptions = {
    isActive: false,
    name: "",
    description: "",
    category: "",
    group: "default"
    }

    publishOptions: function(newValues){
    $.each(newValues, function(key, value){
    if(configOptions.hasOwnProperty(key)){
    configOptions[key] = value;
    }
    else{
    configOptions[key] = value;
    }
    });
    console.log(configOptions);
    }


    For example, if I use this method like so:



    var myOptions = {
    name: "option one",
    category: "the best"
    }

    publishOptions(myOptions)


    I would expect configOptions to look like this:



    configOptions = {
    isActive: false,
    name: "option one",
    description: "",
    category: "the best",
    group: "default"
    }


    I'm using jQuery's each method to map the values from newValues to configOptions, but I suspect there is a much more succinct and elegant way to do this. I would appreciate any suggestions.










    share|improve this question



























      4












      4








      4


      1





      I have an object called defaultOptions and a function that accepts as an argument an object called newValues meant to override the values in defaultOptions with its own. The values that are not specified in newValues should remain default.



      var configOptions = {
      isActive: false,
      name: "",
      description: "",
      category: "",
      group: "default"
      }

      publishOptions: function(newValues){
      $.each(newValues, function(key, value){
      if(configOptions.hasOwnProperty(key)){
      configOptions[key] = value;
      }
      else{
      configOptions[key] = value;
      }
      });
      console.log(configOptions);
      }


      For example, if I use this method like so:



      var myOptions = {
      name: "option one",
      category: "the best"
      }

      publishOptions(myOptions)


      I would expect configOptions to look like this:



      configOptions = {
      isActive: false,
      name: "option one",
      description: "",
      category: "the best",
      group: "default"
      }


      I'm using jQuery's each method to map the values from newValues to configOptions, but I suspect there is a much more succinct and elegant way to do this. I would appreciate any suggestions.










      share|improve this question















      I have an object called defaultOptions and a function that accepts as an argument an object called newValues meant to override the values in defaultOptions with its own. The values that are not specified in newValues should remain default.



      var configOptions = {
      isActive: false,
      name: "",
      description: "",
      category: "",
      group: "default"
      }

      publishOptions: function(newValues){
      $.each(newValues, function(key, value){
      if(configOptions.hasOwnProperty(key)){
      configOptions[key] = value;
      }
      else{
      configOptions[key] = value;
      }
      });
      console.log(configOptions);
      }


      For example, if I use this method like so:



      var myOptions = {
      name: "option one",
      category: "the best"
      }

      publishOptions(myOptions)


      I would expect configOptions to look like this:



      configOptions = {
      isActive: false,
      name: "option one",
      description: "",
      category: "the best",
      group: "default"
      }


      I'm using jQuery's each method to map the values from newValues to configOptions, but I suspect there is a much more succinct and elegant way to do this. I would appreciate any suggestions.







      javascript jquery hash-table






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Jan 16 '16 at 16:00









      Quill

      10.4k53287




      10.4k53287










      asked Sep 17 '14 at 14:06









      tim

      14015




      14015






















          2 Answers
          2






          active

          oldest

          votes


















          3














          jQuery has extend, which seems to be what you are looking for:



          http://api.jquery.com/jquery.extend/



          Otherwise, if you don't want to use jQuery at all, you can make a for loop:



          var first  = { value: 1, string: "two" };
          var second = { value: 2 };

          for ( var i in second )
          if ( first.hasOwnProperty( i ) )
          first[i] = second[i];

          first.value == 2; // true






          As a side, your if statement isn't doing anything because both cases assign the value to configOptions.






          share|improve this answer





























            1














            You can use Lodash's merge function:



            var defaultConfigOptions = {
            isActive: false,
            name: "",
            description: "",
            category: "",
            group: "default"
            }

            var myOptions = {
            name: "option one",
            category: "the best"
            }

            var configOptions = _.merge({}, defaultConfigOptions, myOptions)

            console.log(configOptions === defaultConfigOptions)
            console.log("configOptions: ", configOptions)
            console.log("defaultConfigOptions: ", defaultConfigOptions)


            And this is what you will get:



            enter image description here



            See in jsbin: https://jsbin.com/jayihus/edit?js,console,output






            share|improve this answer








            New contributor




            Yuci is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.


















              Your Answer





              StackExchange.ifUsing("editor", function () {
              return StackExchange.using("mathjaxEditing", function () {
              StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
              StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
              });
              });
              }, "mathjax-editing");

              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: "196"
              };
              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: false,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: null,
              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%2fcodereview.stackexchange.com%2fquestions%2f63161%2fmapping-object-values-from-one-object-to-another%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              3














              jQuery has extend, which seems to be what you are looking for:



              http://api.jquery.com/jquery.extend/



              Otherwise, if you don't want to use jQuery at all, you can make a for loop:



              var first  = { value: 1, string: "two" };
              var second = { value: 2 };

              for ( var i in second )
              if ( first.hasOwnProperty( i ) )
              first[i] = second[i];

              first.value == 2; // true






              As a side, your if statement isn't doing anything because both cases assign the value to configOptions.






              share|improve this answer


























                3














                jQuery has extend, which seems to be what you are looking for:



                http://api.jquery.com/jquery.extend/



                Otherwise, if you don't want to use jQuery at all, you can make a for loop:



                var first  = { value: 1, string: "two" };
                var second = { value: 2 };

                for ( var i in second )
                if ( first.hasOwnProperty( i ) )
                first[i] = second[i];

                first.value == 2; // true






                As a side, your if statement isn't doing anything because both cases assign the value to configOptions.






                share|improve this answer
























                  3












                  3








                  3






                  jQuery has extend, which seems to be what you are looking for:



                  http://api.jquery.com/jquery.extend/



                  Otherwise, if you don't want to use jQuery at all, you can make a for loop:



                  var first  = { value: 1, string: "two" };
                  var second = { value: 2 };

                  for ( var i in second )
                  if ( first.hasOwnProperty( i ) )
                  first[i] = second[i];

                  first.value == 2; // true






                  As a side, your if statement isn't doing anything because both cases assign the value to configOptions.






                  share|improve this answer












                  jQuery has extend, which seems to be what you are looking for:



                  http://api.jquery.com/jquery.extend/



                  Otherwise, if you don't want to use jQuery at all, you can make a for loop:



                  var first  = { value: 1, string: "two" };
                  var second = { value: 2 };

                  for ( var i in second )
                  if ( first.hasOwnProperty( i ) )
                  first[i] = second[i];

                  first.value == 2; // true






                  As a side, your if statement isn't doing anything because both cases assign the value to configOptions.







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Sep 17 '14 at 15:09









                  Carl

                  436210




                  436210

























                      1














                      You can use Lodash's merge function:



                      var defaultConfigOptions = {
                      isActive: false,
                      name: "",
                      description: "",
                      category: "",
                      group: "default"
                      }

                      var myOptions = {
                      name: "option one",
                      category: "the best"
                      }

                      var configOptions = _.merge({}, defaultConfigOptions, myOptions)

                      console.log(configOptions === defaultConfigOptions)
                      console.log("configOptions: ", configOptions)
                      console.log("defaultConfigOptions: ", defaultConfigOptions)


                      And this is what you will get:



                      enter image description here



                      See in jsbin: https://jsbin.com/jayihus/edit?js,console,output






                      share|improve this answer








                      New contributor




                      Yuci is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                      Check out our Code of Conduct.























                        1














                        You can use Lodash's merge function:



                        var defaultConfigOptions = {
                        isActive: false,
                        name: "",
                        description: "",
                        category: "",
                        group: "default"
                        }

                        var myOptions = {
                        name: "option one",
                        category: "the best"
                        }

                        var configOptions = _.merge({}, defaultConfigOptions, myOptions)

                        console.log(configOptions === defaultConfigOptions)
                        console.log("configOptions: ", configOptions)
                        console.log("defaultConfigOptions: ", defaultConfigOptions)


                        And this is what you will get:



                        enter image description here



                        See in jsbin: https://jsbin.com/jayihus/edit?js,console,output






                        share|improve this answer








                        New contributor




                        Yuci is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                        Check out our Code of Conduct.





















                          1












                          1








                          1






                          You can use Lodash's merge function:



                          var defaultConfigOptions = {
                          isActive: false,
                          name: "",
                          description: "",
                          category: "",
                          group: "default"
                          }

                          var myOptions = {
                          name: "option one",
                          category: "the best"
                          }

                          var configOptions = _.merge({}, defaultConfigOptions, myOptions)

                          console.log(configOptions === defaultConfigOptions)
                          console.log("configOptions: ", configOptions)
                          console.log("defaultConfigOptions: ", defaultConfigOptions)


                          And this is what you will get:



                          enter image description here



                          See in jsbin: https://jsbin.com/jayihus/edit?js,console,output






                          share|improve this answer








                          New contributor




                          Yuci is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.









                          You can use Lodash's merge function:



                          var defaultConfigOptions = {
                          isActive: false,
                          name: "",
                          description: "",
                          category: "",
                          group: "default"
                          }

                          var myOptions = {
                          name: "option one",
                          category: "the best"
                          }

                          var configOptions = _.merge({}, defaultConfigOptions, myOptions)

                          console.log(configOptions === defaultConfigOptions)
                          console.log("configOptions: ", configOptions)
                          console.log("defaultConfigOptions: ", defaultConfigOptions)


                          And this is what you will get:



                          enter image description here



                          See in jsbin: https://jsbin.com/jayihus/edit?js,console,output







                          share|improve this answer








                          New contributor




                          Yuci is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.









                          share|improve this answer



                          share|improve this answer






                          New contributor




                          Yuci is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.









                          answered Dec 18 at 10:24









                          Yuci

                          1112




                          1112




                          New contributor




                          Yuci is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.





                          New contributor





                          Yuci is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.






                          Yuci is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.






























                              draft saved

                              draft discarded




















































                              Thanks for contributing an answer to Code Review Stack Exchange!


                              • 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.


                              Use MathJax to format equations. MathJax reference.


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





                              Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                              Please pay close attention to the following guidance:


                              • 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%2fcodereview.stackexchange.com%2fquestions%2f63161%2fmapping-object-values-from-one-object-to-another%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







                              Popular posts from this blog

                              Сан-Квентин

                              8-я гвардейская общевойсковая армия

                              Алькесар