2016-02-28 4 views
0

У меня «shared.checkedFacility» Объем массива в контроллере, который читать что-то вроде:Проблема при сравнении массивов

[14, 49, 93, 122, 44, 40, 88, 83, 65, 9, 38, 28, 8, 53, 125, 155] 

и я динамически генерировать два двумерный массив в переднем конце, где, например, одного мерного массив из «shared.facilities [$ родителя. $ индекс]» читается как

{"0":56,"1":13,"2":49,"3":3,"4":11,"5":7,"6":19,"7":4,"8":9,"9":131,"10":21} 

Теперь я сравнивая это два массива в нг-шоу аргумент, как

containsAny(shared.checkedFacility,shared.facilities[$index]) 

Где, как функция Defination, как

function containsAny(source, target) { 
     console.log("contains called"); 
     var result = source.filter(function(item) { 
      return target.indexOf(item) > -1 
     }); 
     return (result.length > 0); 
    } 

Но некоторые, как эта функция не возвращает истину или ложь, как заставить его работать?

Пожалуйста, спаси меня, так как я снова здесь, в Угловом или в Javascript Env прямо с PHP.

+0

'shared.facilities [$ parent. $ Index]' кажется 'Object', а не' Array'? – guest271314

+0

@ guest271314, а затем как преобразовать его в массив в frontend, чтобы моя функция containsAny, которая в основном сравнивает элементы массива? – LittleNerd

+0

Вы можете использовать 'Object.keys()', 'Array.prototype.map()'; см. сообщение – guest271314

ответ

0

Вы можете использовать Object.keys(), .map() создать массив из shared.facilities[$parent.$index]

// `shared.checkedFacility` 
 
var checkedFacility = [14 
 
         , 49 
 
         , 93 
 
         , 122 
 
         , 44 
 
         , 40 
 
         , 88 
 
         , 83 
 
         , 65 
 
         , 9 
 
         , 38 
 
         , 28 
 
         , 8 
 
         , 53 
 
         , 125 
 
         , 155 
 
         ]; 
 
// shared.facilities[$parent.$index] 
 
var facilities = { 
 
    "0": 56, 
 
    "1": 13, 
 
    "2": 49, 
 
    "3": 3, 
 
    "4": 11, 
 
    "5": 7, 
 
    "6": 19, 
 
    "7": 4, 
 
    "8": 9, 
 
    "9": 131, 
 
    "10": 21 
 
}; 
 
// create an array having values contained in `facilities` 
 
var arr = Object.keys(facilities).map(function(prop, index) { 
 
    return facilities[prop] 
 
}); 
 

 
console.log(arr) 
 

 
function containsAny(source, target) { 
 
    console.log("contains called"); 
 
    var result = source.filter(function(item) { 
 
    return target.indexOf(item) > -1 
 
    }); 
 
    return (result.length > 0); 
 
} 
 
// pass `arr` as second parameter to `containsAny` 
 
var res = containsAny(checkedFacility, arr); 
 

 
console.log(res)

+0

Спасибо guest271314, вы сэкономили много времени. У вас было отличное решение. – LittleNerd

0

Ваша функция терпит неудачу на:

target.indexOf(item) 

, потому что цель в вашем примере является Объект, а не Array, поэтому вы не можете позвонить indexOf функция.

Таким образом, вы, скорее всего, получают:

Uncaught TypeError: target.indexOf is not a function

Чтобы решить, что вы должны передать массив в качестве цели вместо прохождения объекта.