如何在 JavaScript 中使用两个数组创建键值对?

问题描述 投票:0回答:7

我有两个数组,

keys
commonkeys

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

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'
};
javascript keyvaluepair
7个回答
6
投票

您可以在一个数组上使用

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);


5
投票

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
投票

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]]));


1
投票

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

就像在 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 的最后一个元素,您必须在循环后手动添加它。

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


1
投票

试试这个可能会有帮助。

  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);

0
投票

使用 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));


0
投票

    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);

© www.soinside.com 2019 - 2024. All rights reserved.