2016-12-20 6 views
-5

У меня есть два массива, keys и commonkeysКак создать пару ключевых значений с использованием двух массивов в javascript?

Я хочу, чтобы создать пару ключей значение, используя эти два массива и вывод должен быть как 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' 
     }; 
+0

Какая последняя пара значений ключа ('*': 'en_US') в langKeys создана –

+7

Что вы пробовали? Вы знаете, как использовать циклы и свойства? Пожалуйста, покажите нам свою попытку, даже если она не работает. – Bergi

+1

Существует довольно простой, очевидный, прямой способ, включающий простой цикл. Могут быть более сложные, элегантные или напуганные способы сделать то же самое с разными приемами. Где именно лежит ваш камнем преткновения? – deceze

ответ

0

Используйте цикл для перебора обоих массивов , и назначьте его другому, используя массив [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));

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

Здесь нет тега jQuery. Функция 'ready' не является ненужной и не будет работать без jQuery. – Liam

+0

Да нет необходимости сохранять там готовую функцию. Кстати, напомни мне :) –

3

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

Этот пример будет работать во всех браузерах.

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

1

То, что вы хотите достичь, чтобы создать объект из двух массивов. Первый массив содержит значения, а второй массив содержит имена объектов .

Как и в javascript, вы можете создавать новые свойства с помощью variales, например.

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

EDIT

Это будет работать только тогда, когда оба массива имеют одинаковый размер (на самом деле, если keys меньше или же размер чем commonKeys).

Для последнего элемента langKeys в вашем примере вам нужно будет добавить его вручную после цикла.

То, что вы хотели достичь, возможно, было чем-то более сложным, но тогда в вашем вопросе отсутствует информация.