【问题标题】:How to create key value pair using two arrays in JavaScript?如何在 JavaScript 中使用两个数组创建键值对?
【发布时间】:2021-09-30 23:31:47
【问题描述】:

我有两个数组,keyscommonkeys

我想使用这两个数组创建一个键值对,输出应该类似于langKeys

怎么做?

这是数组一:

var keys=['en_US','es_ES', 'pt_PT','fr_FR','de_DE','ja_JP','it_IT']

这是数组二:

var commonKeys=['en-*','es-*', 'pt-*','fr-*','de-*','ja-*','it-*', '*']

这是我需要的输出:

var langKeys = {
    'en-*': 'en_US',
    'es-*': 'es_ES',
    'pt-*': 'pt_PT',
    'fr-*': 'fr_FR',
    'de-*': 'de_DE',
    'ja-*': 'ja_JP',
    'it-*': 'it_IT',
    '*': 'en_US'
};

【问题讨论】:

  • langKeys 中最后一个键值对 ('*':'en_US') 是如何创建的
  • 你试过什么?你知道如何使用循环和属性吗?请向我们展示您的尝试,即使它不起作用。
  • 有一个非常简单、明显、直接的方法,涉及一个简单的循环。可能有更精细、更优雅或更时髦的方法可以用不同的技术来做同样的事情。你的绊脚石到底在哪里?
  • 你试过什么?您有任何问题的代码,请添加到问题中,以便我们尝试复制问题。也没有关于您希望如何匹配这些值的信息。两个数组是否总是完全匹配的顺序?如果是这样,只需遍历两个数组并连接来自同一索引的每个值。 '*':'en_US' 在期望的结果中看起来很奇怪,这是什么规则?从本质上讲,我认为目前的问题是扩大并遗漏了一些信息。
  • 没有绊脚石。我想知道如何将这两个数组映射成键值对。

标签: javascript keyvaluepair


【解决方案1】:

您可以在一个数组上使用map() 函数并创建您的对象

var keys=['en_US','es_ES', 'pt_PT','fr_FR','de_DE','ja_JP','it_IT'];
var commonKeys=['en-*','es-*', 'pt-*','fr-*','de-*','ja-*','it-*', '*'];

var output = keys.map(function(obj,index){
  var myobj = {};
  myobj[commonKeys[index]] = obj;
  return myobj;
});

console.log(output);

【讨论】:

    【解决方案2】:

    JavaScript 是一种用途非常广泛的语言,因此可以通过多种方式做你想做的事。您可以使用基本循环来遍历数组,如下所示:

    var keys=['en_US','es_ES', 'pt_PT','fr_FR','de_DE','ja_JP','it_IT']
    var commonKeys=['en-*','es-*', 'pt-*','fr-*','de-*','ja-*','it-*', '*']
    
    var i;
    var currentKey;
    var currentVal;
    
    var result = {}
    
    
    for (i = 0; i < keys.length; i++) {
        currentKey = commonKeys[i];
        currentVal = keys[i];
        result[currentKey] = currentVal;    
    }

    此示例适用于所有浏览器。

    【讨论】:

      【解决方案3】:

      您想要实现的是从两个数组创建一个对象。第一个数组包含值,第二个数组包含对象的属性名称

      与在 javascript 中一样,您可以使用变量创建新属性,例如

      objectName[expression] = value; // x = "age"; person[x] = 18,

      你可以这样做:

      var keys=['en_US','es_ES', 'pt_PT','fr_FR','de_DE','ja_JP','it_IT'];
      var commonKeys=['en-*','es-*', 'pt-*','fr-*','de-*','ja-*','it-*', '*'];
      
      var langKeys = {};
      
      var i;
      for (i=0; i < keys.length; i++) {
          langKeys[commonKeys[i]] = keys[i];
      }
      

      编辑

      这仅在两个数组具有相同大小时才有效(实际上,如果keys 小于或等于commonKeys 的大小)。

      对于示例中 langKeys 的最后一个元素,您必须在循环之后手动添加它。

      您想要实现的目标可能更复杂,但是您的问题中缺少信息。

      【讨论】:

        【解决方案4】:

        试试这个可能会有帮助。

          var langKeys = {};
          var keys=['en_US','es_ES', 'pt_PT','fr_FR','de_DE','ja_JP','it_IT']
          var commonKeys=['en-*','es-*', 'pt-*','fr-*','de-*','ja-*','it-*', '*']
          function createArray(element, index, array) {
             langKeys[element]= keys[index];
             if(!keys[index]){
              langKeys[element]= keys[index-(commonKeys.length-1)];
             }
          }
        
          commonKeys.forEach(createArray);
          console.info(langKeys);
        

        【讨论】:

        • 这里没有 jQuery 标签。 ready 函数是不必要的,没有 jQuery 将无法工作
        • 是的,不需要在那里保留准备好的功能,已删除。顺便说一句,谢谢你提醒我:)
        【解决方案5】:

        ES6 更新:

        let commonKeys = ['en-*', 'es-*', 'pt-*', 'fr-*', 'de-*', 'ja-*', 'it-*', '*'];
        let keys = ['en_US', 'es_ES', 'pt_PT', 'fr_FR', 'de_DE', 'ja_JP', 'it_IT', 'en_US'];
        
        let zipArrays = (keysArray, valuesArray) => Object.fromEntries(keysArray.map((value, index) => [value, valuesArray[index]]));
        
        let langKeys = zipArrays(commonKeys, keys);
        console.log(langKeys);
        
        // let langKeys = Object.fromEntries(commonKeys.map((val, ind) => [val, keys[ind]]));

        【讨论】:

          【解决方案6】:

          使用 for 循环遍历两个数组,并使用 array[i] 将一个分配给另一个,其中i 是一个表示值的索引位置的变量。

          var keys = ['en_US', 'es_ES', 'pt_PT', 'fr_FR', 'de_DE', 'ja_JP', 'it_IT'];
          
          
          var commonKeys = ['en-*', 'es-*', 'pt-*', 'fr-*', 'de-*', 'ja-*', 'it-*', '*'];
          
          var langKeys = {};
          for (var i = 0; i < keys.length; i++) {
            var commonkey = commonKeys[i];
            langKeys[commonkey] = keys[i];
          }
          console.log(JSON.stringify(langKeys));

          【讨论】:

            【解决方案7】:

                let keys = ['en_US', 'es_ES', 'pt_PT', 'fr_FR', 'de_DE', 'ja_JP', 'it_IT'];
                let commonKeys = ['en-*', 'es-*', 'pt-*', 'fr-*', 'de-*', 'ja-*', 'it-*', '*'];
            
            // declaration of empty object where we'll store the key:value
            let result = {}; 
            
            // iteration over first array to pick up the index number 
            for (let i in keys) {
            
            // for educational purposes, showing the number stored in i (index)
            console.log(`index number: ${i}`);
            
            // filling the object with every element indicated by the index
            // objects works in the basis of key:value so first position of the index(i)
            // will be filled with the first position of the first array (keys) and the second array (commonKeys)  and so on.
            
                result[keys[i]] = commonKeys[i];
            // keep in mind that for in will iterate through the whole array length
            }
            console.log(result);

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2019-01-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-10-02
              • 2017-09-22
              • 2022-12-15
              相关资源
              最近更新 更多