我有一个Product javascript数组,其中包含所有产品信息。 创建了一个迭代此数组并通过匹配id找到产品的函数。
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,也不知道为什么?如果我将匹配的数组键存储在变量中并在迭代后,返回该键的值,它返回正确的对象。但这不是正确的方法,因为我想停止迭代并在找到对象时返回值。
答案 0 :(得分: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 :(得分:1)
如果找到您从findProduct
回调方法返回的项目,则始终从$.each()
返回false,但这不会反映在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;
}
答案 2 :(得分: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;
}