2013-10-15 3 views
0

Я работаю над проектом, который требует от меня создания хэш-карты, это мой первый и после исследования я застрял. Мне нужно создать карту из двух массивов.Создать/слить объект hashmap из двух массивов

Массив 1:

var arrayOne = [ "board", "admin" ] 

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

var myMap = { 
    board: false, 
    admin: false 
} 

массив 2:

var arrayTwo = [ "board" ] 

Onl y 'board' существует здесь, поэтому я хочу превратить значение в 'true'. Я застрял на куда идти дальше, так что я в конечном итоге с:

var myMap = { 
    board: true, 
    admin: false 
} 

Вот мой сценарий до сих пор:

var myMap = {}; 
var arrayOne = [ "board", "admin" ]; 
for (var i = 0; i < arrayOne.length; i++) { 
    var a = arrayOne[i]; 
    myMap[a] = false; // sets default value 
} 

Любая помощь, чтобы сделать «следующий бит», чтобы слить два сильно оценил, спасибо.

+0

Как это: http://ideone.com/tspfzc? – Passerby

ответ

2

Я думаю, вам стоит продолжить следующим образом:

for (var i = 0; i < arrayTwo.length; i++) { 
    if (arrayTwo[i] in myMap) 
     myMap[arrayTwo[i]] = true; 
} 

... установка свойства true только если они существуют в карте.

+3

@downvoter Пожалуйста, уточните. – VisioN

+1

+1 компенсировать нижний предел. – Passerby

+0

+1 тоже много thx :) – Halcyon991

0

Просто сделайте один, то другой ...

метод
var i; 
var myMap = {}; 
var arrayOne = [ "board", "admin" ]; 

for (i = 0; i < arrayOne.length; i++) { 
    myMap[arrayOne[i]] = false; 
} 

var arrayTwo = [ "board" ]; 

for (i = 0; i < arrayTwo.length; i++) { 
    myMap[arrayTwo[i]] = true; 
} 
1

Используйте IndexOf(), чтобы проверить, если элемент находится во втором массиве или не

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf

http://www.w3schools.com/jsref/jsref_indexof_array.asp

var myMap = {}; 
var arrayOne = [ "board", "admin" ]; 
for (var i = 0; i < arrayOne.length; i++) { 
    var a = arrayOne[i]; 
    myMap[a] = false; // sets default value 
    if (arrayTwo.indexOf(a) != -1) 
    { 
     myMap[a] = true; 
    } 
} 
+0

Будьте осторожны, 'indexOf' по-прежнему имеет ограниченную поддержку. – VisioN

+0

@VisioN на самом деле большинство браузеров поддерживают этот http://kangax.github.io/es5-compat-table/ – gurvinder372

0

ES5 версия

arrayOne.forEach(function(item){ 
    myMap[item] = false; 
}); 
arrayTwo.forEach(function(item){ 
    (item in myMap) && (myMap[item] = true); 
}); 
Смежные вопросы