2015-10-12 6 views
1

Я новичок в underscore.js
У меня есть два объекта TOWERS и UNITSиспользованием _.where с массивом underscore.js

var TOWERS = [ 
    { 
     id: 1, 
     name: "A", 
     project: 1, 
     floors: 8 
    }, 
    { 
     id: 2, 
     name: "B", 
     project: 1, 
     floors: 8 
    }, 
    { 
     id: 3, 
     name: "C", 
     project: 1, 
     floors: 8 
    }, 
    { 
     id: 4, 
     name: "D", 
     project: 1, 
     floors: 8 
    }, 
    { 
     id: 5, 
     name: "E", 
     project: 1, 
     floors: 8 
    }, 
    { 
     id: 6, 
     name: "F", 
     project: 2, 
     floors: 8 
    }, 
    { 
     id: 7, 
     name: "G", 
     project: 2, 
     floors: 8 
    }, 
    { 
     id: 8, 
     name: "H", 
     project: 2, 
     floors: 8 
    } 
] 

var UNITS = [ 
    { 
     id: 1, 
     name: "101", 
     unittype: 1, 
     tower: 1, 
     floor: 1 
    }, 
    { 
     id: 2, 
     name: "102", 
     unittype: 2, 
     tower: 1, 
     floor: 1 
    }, 
    { 
     id: 3, 
     name: "101", 
     unittype: 1, 
     tower: 2, 
     floor: 1 
    }, 
    { 
     id: 4, 
     name: "102", 
     unittype: 2, 
     tower: 2, 
     floor: 1 
    }, 
    { 
     id: 5, 
     name: "101", 
     unittype: 3, 
     tower: 3, 
     floor: 1 
    }, 
    { 
     id: 1, 
     name: "102", 
     unittype: 3, 
     tower: 8, 
     floor: 1 
    } 
] 

Я подбирая TOWERSидентификатор который имеет project:1 с помощью:

var getTowers = _.where(TOWERS, {project:1}); 
var getUniqueTowers = _.chain(getTowers).pluck("id").unique().compact().value(); 

Я получил [1,2,3,4,5]
Сейчас я хочу выбрать UNITS, значение которого находится в [1,2,3,4,5]

Есть ли способ использования _.where, как показано ниже?

_.where(UNITS, {tower:[1,2,3,4,5]} 

ответ

1

Вы можете использовать .filter с .indexOf, как так

var units = _.chain(UNITS) 
    .filter(function (unit) { 
     return _.indexOf(getUniqueTowers, unit.tower) >= 0;   
    }) 
    .value() 

Example

версии без подчеркивания

var units = UNITS.filter(function (unit) { 
    return getUniqueTowers.indexOf(unit.tower) >= 0;    
}) 
Смежные вопросы