0

Скажем, у меня есть следующий JavaScript массив:Принудительная ассоциативный массив на каждое значение другого массива в Javascript

var mainArray = ["thing1", "thing2", "thing3"]; 

И для каждого из этих элементов массива, я хочу, чтобы добавить ассоциативный массив, так что выглядит примерно так:

var mainArray = [ 
    "thing1" { 
    key1 => value1, 
    key2 => value2, 
    key3 => value3 
    }, 
    "thing2" { 
    key4 => value4, 
    key5 => value5, 
    key6 => value6 
    }, 
    "thing3" { 
    key7 => value7, 
    key8 => value8, 
    key9 => value9 
    } 
]; 

Как бы я нажимал каждый ассоциативный массив на каждый элемент mainArray?

+0

Были ли вы планируете ссылки mainArray [0] или mainArray [ "thing1"]/mainArray.thing1? – James

+0

[В javascript нет ассоциативных массивов!] (Http://andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/) Пожалуйста, отредактируйте свой вопрос, чтобы отразить то, что вы имеете в виду, и используйте синтаксис js в вашем примере. – Bergi

ответ

0

Я считаю, что вам нужен объект, содержащий объекты.

var myObj = { 
    "thing1": { 
    "key1": "someValue", 
    "key2": "someValue" 
    }, 
    "thing2": { 
    // etc 
    } 
}; 

alert(myObj.thing1.key1); 
0

Использование JavaScript метод forEach массива:

JSFiddle here.

var mainArray = ["thing1", "thing2", "thing3"] 

var mainObj = {}; 
mainArray.forEach(function(curr, ii) { 
    mainObj[curr] = { 'key1': 'value' + (ii * 3 + 1), 'key2': 'value' + (ii * 3 + 2), 'key3': 'value' + (ii * 3 + 3) } 
}) 
console.log(mainObj) 

Выходы:

{ 
    "thing1": { "key1": "value1", "key2": "value2", "key3": "value3" }, 
    "thing2": { "key1": "value4", "key2": "value5", "key3": "value6" }, 
    "thing3": { "key1": "value7", "key2": "value8", "key3": "value9" } 
} 

И могут быть доступны mainObj.thing1


В качестве альтернативы, с помощью JavaScript map метода:

Another JSFiddle here.

var mainArray = ["thing1", "thing2", "thing3"] 

var newArray = mainArray.map(function(curr, ii) { 
    var obj = {} 
    obj[curr] = { 'key1': 'value' + (ii * 3 + 1), 'key2': 'value' + (ii * 3 + 2), 'key3': 'value' + (ii * 3 + 3) } 
    return obj 
}) 
console.log(newArray) 

Выходов:

[ 
    { "thing1": { "key1": "value1", "key2": "value2", "key3": "value3" } }, 
    { "thing2": { "key1": "value4", "key2": "value5", "key3": "value6" } }, 
    { "thing3": { "key1": "value7", "key2": "value8", "key3": "value9" } } 
] 

Однако map только возвращает массив. Поэтому доступ к элементам будет выглядеть как newArray[0].thing1, который, я думаю, нечетный.


Или, если вы желаете, чтобы просто сплести их вместе:

JSFiddle weave.

var mainArray = ["thing1", "thing2", "thing3"] 

var newArray = []; 
mainArray.forEach(function(curr, ii, arr) { 
    newArray.push(curr, 
       { 
        'key1': 'value' + (ii * 3 + 1), 
        'key2': 'value' + (ii * 3 + 2), 
        'key3': 'value' + (ii * 3 + 3) 
       } 
    ); 
}) 
console.log(newArray) 

Выходы:

[ 
    "thing1", { "key1": "value1", "key2": "value2", "key3": "value3" }, 
    "thing2", { "key1": "value4", "key2": "value5", "key3": "value6" }, 
    "thing3", { "key1": "value7", "key2": "value8", "key3": "value9" } 
] 
0

Вы можете сделать это так:

var mainArray = {"thing1":{}, "thing2":{}, "thing3":{}}; 
mainArray.thing1[key1]=value1; 
mainArray.thing1[key2]=value2; 

Я добавил только 2 значения, но вы можете добавить столько, сколько вам нужно.

0

JavaScript ассоциативные массивы - это действительно просто объекты. Вы можете использовать что-то вроде следующего, чтобы создать массив ассоциативных массивов,

function createObject(key1, var1, key2, var2, key3, var3) { 
    var newobj = {}; 
    newobj[key1] = var1; 
    newobj[key2] = var2; 
    newobj[key3] = var3; 
    return newobj; 
} 

var a1 = []; 
a1.push(createObject("var1", "a", "var2", "b", "var3", "c")); 
a1.push(createObject("var4", "d", "var5", "e", "var6", "f")); 
alert(a1[1].var4); 
alert(a1[1]["var4"]); 
alert(a1[0].var3); 
alert(a1[0]["var3"]); 

Это предупредит «д» в два раза, а затем «с» дважды.

0

Вот моя попытка:

function objectify(keys, values){ 
    return keys.reduce(function(obj, key, i){ 
     obj[key] = values[i]; 
     return obj 
    }, {}); 
} 

Пример вызова:

objectify(
    ['a','b','c'], 
    [{k:1, l:2, m:3},{k:4, l:5, m:6},{k:7, l:8, m:9}] 
); 

Demo on JSFiddle

Смежные вопросы