2015-11-01 4 views
0

Есть много связанных вопросов, ни одна из них не ответила мне. Другими словами, вопросы относятся к сценарию и не изолированы. поэтому мой вопрос здесь:Возврат от анонимной внутренней функции

У меня есть функция JavaScript. Использует jQuery. Я использую анонимную функцию в цикле $ .each(), чтобы найти объект, который я хочу, и вернуться к вызывающему. Нужна помощь, чтобы выяснить, как вернуться из внутренней функции, анонимной.

functions.findRider = function(riderId){ 
    $.each(app.riders, function(index, result) { 
     if (result["id"] == riderId) { 
      console.log("found the rider:"+JSON.stringify(result)); 
      return result; 
     } 
    }); 
    console.log("Did not find rider"); 
} 

app.riders - это массив объектов. Каждый объект в массиве имеет идентификатор.

+3

Это не правильный метод для того, что вы пытаетесь. Вместо этого рассмотрим собственный 'Array.prototype.find', т. Е.' [1, 2, 3] .find (function (e) {return e + 8 === 10;}); // –

+0

@PaulS. Отличное предложение, я попробую это. Спасибо – Vivek

+0

Предложение Павла - правильный ответ. Фильтр занимает второе место. – James

ответ

1

Проще всего было бы создать переменную вне функции $.each() и добавить к нему внутри цикла:

functions.findRider = function(riderId){ 
    var results = []; 
    $.each(app.riders, function(index, result) { 
     if (result["id"] == riderId) { 
      console.log("found the rider:"+JSON.stringify(result)); 
      results.push(result); 
     } 
    }); 
    console.log("Did not find rider"); 
} 
не

Насколько я знаю (но я могу ошибаться), нет никакого способа, для возврата от анонимной функции, подобной этой.

+0

Спасибо @Jonathan, помогает прояснить две вещи, 1, возвращение невозможно, 2. работать. – Vivek

+0

@Aragorn Если это вам поможет, пожалуйста, примите. Если нет, обратная связь пожалуйста? –

+0

Это определенно помогло понять обходное решение, но я бы согласился с предложением PaulS. Спасибо за вашу помощь. – Vivek

1

Вы можете использовать .filter для этого своего рода поиск

как этот

functions.findRider = function(riderId) { 
    var data = app.riders.filter(function(x) { 
     return x.id == riderId; 
    }); 
    return data.length > 0 ? data[0] : null; 
} 
+0

Хороший вопрос, но на самом деле это не отвечает на вопрос о возврате из анонимной функции –

+0

Мне нравится предложение здесь, проверяя его. – Vivek

Смежные вопросы