2016-05-20 4 views
-1

Я следующий фрагмент кода я использую, чтобы выбрать, какие пригороды из списка выбрал пользователь (с неактуальной кода опущены):Underscore.js `не filter` работает

var allSuburbsList = new Array([{"SuburbID":1,"SuburbAreaID":3,"SuburbName":"Alberante","SuburbActive":true,"Area":null,"Agents":[]},{"SuburbID":4,"SuburbAreaID":3,"SuburbName":"Alberton North","SuburbActive":true,"Area":null,"Agents":[]}]); 

var a3burbs = _.filter(allSuburbsList, function(s) { return s.SuburbAreaID === 3; }); 
// 3 is a test value. All the test suburbs so far fall under area no. 3. 

С помощью этого фильтра, a3burbs приходит как пустой массив, []. Если я обманываю и сделать фильтр:

var a3burbs = _.filter(allSuburbsList, function(s) { return true; }); 

затем a3bubrs выходит точную копию allSuburbsList, все пригороды включены. Что я могу делать неправильно? Я использую тот же синтаксис, что и на домашней странице Underscore.js.

Btw, будет так, как я заполнить allSuburbsList из ViewModel собственности массива имеют ничего общего с этим:

var allSuburbsList = new Array(@Html.Raw(JsonConvert.SerializeObject(Model.AllSuburbs))); 

Просто для интереса, моя первая попытка была отвратительная ниже код, но он работал:

var a3burbs = []; 
@{for (var i = 0; i < Model.AllSuburbs.Length; i++) { 
    @:if (allSuburbsList[@i].SuburbAreaID === 3) { 
     @:a3burbs.push(allSuburbsList[@i]); 
    }; 
}; 

ответ

4

Вы создаете новый массив и, проходящий в массиве.

Изменить его

var allSuburbsList = [{"SuburbID":1,"SuburbAreaID":3,"SuburbName":"Alberante","SuburbActive":true,"Area":null,"Agents":[]},{"SuburbID":4,"SuburbAreaID":3,"SuburbName":"Alberton North","SuburbActive":true,"Area":null,"Agents":[]}]; 
+0

Это не буквальный JS, он отображается кодом Razor, который я добавил в конце моего вопроса. Я не могу изменить заявление, которое вы цитируете. – ProfK

+0

В сценарии абсолютного * худшего * вы можете сделать '_.filter (allSuburbsList [0], ...', но я бы ** сильно ** рекомендовал вам найти способ изменить сгенерированный код. – Paarth

+1

@ProfK Да вы можете. var allSuburbsList = @ Html.Raw (JsonConvert.SerializeObject (Model.AllSuburbs)); 'Просто удалите часть' new Array'. –

0

Использование new Array([{}]), вы создаете массив внутри другого массива. Просто создайте экземпляр этого вопроса без new Array()

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