2012-04-10 34 views
14

Tôi đang cố gắng lặp qua localStorage để nhận TẤT CẢ các mục qua localStorage.length hoạt động với thuật toán tìm kiếm của tôi. Nếu tôi thay đổi: i < localStorage.length bên trong vòng lặp for chỉ đơn giản là một số, nghĩa là: for (i=0; i<100; i++) thay vì: (i=0; i<=localStorage.length-1; i++), everthing hoạt động. Tuy nhiên, tôi nhận ra vấn đề có thể nằm trong thuật toán tìm kiếm.Vòng lặp & tìm kiếm qua TẤT CẢ các mục trong localStorage

Mã này nhận được tất cả các mục: (!?)

var name = new Array(); 

    for (var i = 0; i <= localStorage.length - 1; i++) { // i < 100 works perfectly 
    key = localStorage.key(i); 
    val = localStorage.getItem(key); 
    value = val.split(","); //splitting string inside array to get name 
    name[i] = value[1]; // getting name from split string 
    } 

tôi làm việc tìm kiếm thuật toán:

if (str.length == 0) { 
    document.getElementById("searchResult").innerHTML = ""; 
    } 
    else {   
     if(str.length > 0) { 
      var hint = ""; 
      for(var i=0; i < name.length; i++) {     
       if(str.toLowerCase() == (name[i].substr(0, str.length)).toLowerCase()) { //not sure about this line 
        if(hint == "") {        
          hint = name[i];       
         } else {        
          hint = hint + " <br /> " + name[i];         
         }     
        }      
      }    
     }   
} 

if(hint == "") { 
document.getElementById("searchResult").innerHTML=str + " står inte på listan";  
} else {   
    document.getElementById("searchResult").innerHTML = hint;  
    } 
} 

Điều gì là sai với localStorage.length của tôi, hoặc những gì là sai với các thuật toán tìm kiếm?

+0

có lẽ câu trả lời SO này sẽ hữu ích cho bạn: http://stackoverflow.com/questions/3138564/looping-through-localstorage-in-html5-and-javascript –

+0

Độ dài thực tế của localStorage của bạn là bao nhiêu? Hãy thử lặp qua cùng một số thay vì 100. Quá trình suy nghĩ của tôi là, có thể có sự cố với dữ liệu được lưu trữ sau 100 (chẳng hạn như định dạng bạn mong đợi). – Ramesh

+1

Vui lòng sử dụng 'var i' để tránh tạo biến toàn cục (cực kỳ xấu, đặc biệt đối với biến vòng lặp) – ThiefMaster

Trả lời

1

Vấn đề hiện nay giải quyết. Vấn đề là mỗi khi dữ liệu được lưu vào localStorage, một mục trống bổ sung được lưu trữ ở dưới cùng của db cục bộ do hệ quả của vòng lặp không chính xác (trong phần setItem.) ArrayIndex < guestData.length phải là arrayIndex < guestData.length-1. arrayIndex < guestData.length-1 lưu trữ tất cả các mục mà không tạo một mục rỗng ở dưới cùng của cơ sở dữ liệu mà sau này làm sai lệch thuật toán tìm kiếm, vì giá trị cuối cùng được tìm kiếm không được xác định (mục trống).

16

localStorage là object, không phải là array. Hãy thử for(var i in window.localStorage):

for(var i in window.localStorage){ 
    val = localStorage.getItem(i); 
    value = val.split(","); //splitting string inside array to get name 
    name[i] = value[1]; // getting name from split string 
} 
+0

Không phải là đối tượng và mảng được mong đợi hoạt động giống nhau trong ngữ cảnh tức là truy cập các giá trị theo cú pháp mảng hoặc đối tượng –

+0

@VarinderSingh Có vẻ như mặc dù '! (LocalStorage instanceof Array)', đối tượng 'localStorage' có thuộc tính' length'. Tôi không nhận ra điều này khi viết câu trả lời này. Đó có phải là ý bạn không? – user2428118

+1

Có, 'localStorage' không sở hữu thuộc tính' length'. Vì vậy, đối với vấn đề được đề cập, các mục 'localStorage' có thể được lặp qua sử dụng' for() ' –

Các vấn đề liên quan