0

这是我的代码:

var myArray = {}; 
myArray["abc"] = new Array();
myArray["def"] = new Array();
myArray["abc"][0] = "John";
myArray["abc"][1] = "Mary"; 
myArray["abc"][2] = "Jack";  
var letter = "";
var id = "";

for (var i_letter in myArray)    {                
        for (var j_id = 0; j_id < myArray[i_letter].length; j_id++)  {                   
                if (myArray[i_letter][j_id]=== "Mary")  {
                      letter = i_letter;   // error ?
                      id = j_id;   // error?
                }
        }
}
document.write( letter + “ , ” + id);   // why error?  Suppose to be “abc , 1”  

从循环外部获取输出(即 i_letter 和 j_id)的最佳方法是什么?
顺便说一句,如果 myArray 包含大量数据,是否有更高效的代码编写方式?

4

1 回答 1

1

请看我的评论:

var myArray = new Array(); // error here
myArray["abc"] = new Array();
myArray["def"] = new Array();
myArray["abc"][0] = "John";
myArray["abc"][1] = "Mary"; 
myArray["abc"][2] = "Jack";  
var letter = '';
var id = '';

myLoop: // initial point of breaking outer for
for (i_letter in myArray) {               
        for (j_id=0; j_id < myArray[i_letter].length; j_id++)  {                   
                if (myArray[i_letter][j_id] === "Mary")  {
                      letter = i_letter;   
                      id = j_id;
                      break myLoop; // break from two for
                }
        }
}
document.write( letter + ' , ' + id); // error here because of using “ and ”

这种情况下最好的方法是设置循环的初始点myLoop,当发现 Mary 时就停止for执行break myLoop

jsfiddle上的演示。

希望这会有所帮助。

于 2013-07-23T13:17:11.083 回答