2010-08-02 42 views
0

我有2个JavaScript的变量:选择值

var list1 = "john doe|bill williams|poll bregg|michael jordan"; 
var list2 = "analytic|trader|doctor|athlete"; 

我们必须采取记住,这两个变量之间的关系是名字和职业放置在相同的顺序,如:民意调查bregg是一名医生,但约翰·多伊是一个分析。

比我需要创建一个函数,它将根据第一个变量选择值给我第二个变量值。例如:

function getProfession(name){ 
    ... 
    return profession; 
} 

你能提出一个解决方案或提供线索?! 也许我必须使用数组的数组或像这样的smth ?!

+0

是的,你可以通过使用'split'来阅读:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/String/split但是你最好使用'JSON' 。像'var JSON = {“john doe”:“analytic”}'...... etc – Anders 2010-08-02 09:13:37

回答

2

您可能会发现它更容易使用的JavaScript的哈希表性质物体代替:

var professions = {};    // our hashtable 

var list1 = "john doe|bill williams|poll bregg|michael jordan".split('|'); 
var list2 = "analytic|trader|doctor|athlete".split('|'); 

for (var i = 0; i < list1.length; i++) { 
    professions[list1[i]] = list2[i]; 
} 

然后你可以通过使用下标语法来获得职业:

alert(professions['john doe']); // returns "analytic" 
+0

最简单的方法! – 2010-08-02 10:04:57

0

其更好地使用数组是这样的:

var persons = new Array(); 
persons[0] = new Array(); 
persons[0]["name"] = "John Doe"; 
persons[0]["proffesion"] = "Analytic"; 
persons[1] = new Array(); 
persons[1]["name"] = "Bill Williams"; 
persons[1]["proffesion"] = "Trader"; 
etc... 

比你可以遍历它像一个正常的数组:

for(i in persons) 
    alert(persons[i]["name"]+" - "+persons[i]["proffesion"]); 
+0

使用'persons [0] = {};'而不是'persons [0] = new Array();''' ,因为你不会使用这些对象的任何数组属性。 – 2010-08-02 09:25:47

+0

...一般来说,在循环访问数组元素时,for ... in循环不被认为是好的做法。 – 2010-08-02 09:28:42

1
var persons = {}; 
var list1 = "john doe|bill williams|poll bregg|michael jordan".split("|"); 
var list2 = "analytic|trader|doctor|athlete".split("|"); 
for (var i in list1) { 
    persons[list1[i]] = list2[i]; 
} 

function getProfession(name) { 
    return persons[name]; 
} 
+0

最好的答案,但重复。不管怎样,谢谢! – 2010-08-02 10:06:47

1

你可以这样做的,采用分体式和的indexOf Javascript函数:

var list1 = "john doe|bill williams|poll bregg|michael jordan"; 
var list2 = "analytic|trader|doctor|athlete"; 

var names = list1.split("|"); 
var professions = list2.split("|"); 

function getProfession(name){ 
    var index = names.indexOf(name); 

    return professions[index]; 
} 

alert(getProfession('poll bregg')); 

全部例如:http://jsfiddle.net/zQXjd/

+0

就像在jsfiddle中展示实例的家伙一样! – 2010-08-02 10:07:22

0

,而不是2 variabled你可以使用一个对象获得您的功能 -

var profession = { "john doe" : "analytic", 
      "bill williams" : "trader", 
      "poll bregg" : "doctor", 
      "michael jordan" : "athlete" 
     }; 

然后在功能,您可以使用它作为 -

function getProfession(name) { 
    return profession[name]; 

} 

但从maintainence点也,这是更容易为你添加新的元素和删除现有的元素。

1

代码可能是这样的。

var list1 = "john doe|bill williams|poll bregg|michael jordan"; 
var list2 = "analytic|trader|doctor|athlete"; 
var name_array=new Array(); 
var profession_array=new Array(); 
name_array=list1.split("|");  
profession_array=list2.split("|");  
function getProfession(name)  
{ 
    for (i=0;i<name_array.length;i++) 
    { 
     if(name==name_array[i]) 
     { 
      return profession_array[i]; 
     } 
    } 
    return "Not in list";  
} 

如果只有数据是指定的格式,则代码是可能的。

+0

看起来太难了,但无论如何都适合我! – 2010-08-02 10:05:35