2014-02-05 27 views
0

我有一個Product javascript數組,其中包含所有產品信息。 創建一個在此數組上迭代並通過匹配id來查找產品的函數。Javascript函數返回false發現連對象

var products = JSON.parse('[{"Product":{"id":"1","name":"My Product","description":"This is my new product","price":"10.00","currency":"$","stock":"0","image":"/image1.png"}},{"Product":{"id":"5","name":"Dummy Product 2","description":"Some dummy text goes here.","price":"10.00","currency":"$","stock":"100","image":"image2.jpg"}}]'); 

$(document).ready(function(){ 
    console.log(products); 
    alert(findProduct(5)); //it will returns false everytime, evan it has matching product 
}); 

function findProduct(product_id){ 
    $.each(products, function(k, v){ 
     if(v.Product.id == product_id){ 
      console.log(v); 
      return products[k]; //or return 'v' 
     } 
    }); 
    return false; 
} 

入住這Demo

功能每次返回false,即使找到了匹配的產品ID,不知道爲什麼?如果我將匹配的數組鍵存儲在一個變量中並在迭代後返回該鍵的值,它將返回適當的對象。但那不是正確的方法,因爲我想停止迭代並返回找到對象的值。

回答

1

你總是返回false從findProduct,如果該項目被發現你是從$.each()回調方法返回,但這並不反映在findProduct方法返回的值中。

function findProduct(product_id) { 
    var found = false; 
    $.each(products, function (k, v) { 
     if (v.Product.id == product_id) { 
      console.log(v); 
      found = products[k]; 
      //return false to prevent further iteration 
      return false; 
     } 
    }); 
    return found; 
} 
1

用這個代替:

function findProduct(product_id){ 
    var result = false; 
    $.each(products, function(k, v){ 
     if(v.Product.id == product_id){ 
      console.log(v); 
      result = products[k]; //or return 'v' 
      return; 
     } 
    }); 
    return result; 
} 

而現在的問題是:

function findProduct(product_id){ 
    $.each(products, function(k, v){ 
     if(v.Product.id == product_id){ 
      console.log(v); 
      return products[k]; //returns from the $.each callback 
     } 
    }); 
    return false; 
} 
+1

'return result;'maybe? – Tony

+0

是的,修好了。謝謝你的提示。 –

0

不需要jQuery的每個函數。僅在需要時才使用庫。

問題是,'each'方法實際上是另一個函數。從它返回對'findProduct'函數沒有任何意義。

function findProduct(product_id){ 
    for(var k in products){ 
     var product = products[k]; 
     if(product && product.Product && product.Product.id == product_id) 
      return product; 
    } 
    return false; 
}