2016-08-24 3 views
1

Я не хочу, чтобы эта карта возвращалась не определена, как я могу это сделать?Возврат undefined на Array.map

var onCompareSelectedClick = function() { 
      var talentProfileInfoForAppliedResources = appliedResourcesEntries.map(function(res) { 
       console.log(res); 
       if(res.compareSelected == true) { 
        return data.getTalentProfileInfo(res.RES.RES_ID); 
       } 
      }); 
      console.log(talentProfileInfoForAppliedResources); 
      this.openCompareTPDlg(talentProfileInfoForAppliedResources); 
     }.bind(this); 
+0

Похоже, что проблема может быть условной в заявлении МПВ, но вы действительно должны получить скрипку, чтобы продемонстрировать эту проблему. – Sudsy

+0

Wow он возвращает undefind когда res.compareSelected = false..i не думаю, что это необходимо подробнее – FreakProgrammer

ответ

0

Просто добавьте else заявление в map метод, возвращающий нужное значение, например:

if(res.compareSelected == true) { 
    return data.getTalentProfileInfo(res.RES.RES_ID); 
} else { 
    return 'default_value'; 
} 
0

TL; DR

Используйте метод Array.filter после Array.map удалить неопределенные элементы в новом массиве.


Расширяя @ ответ Bloomca в:

As stated in the documentation provided here.

Метод map() создает новый массив с результатами вызова предоставленной функции для каждого элемента в этом массиве.

Следовательно, причина, по которой ваш новый массив содержит неопределенные элементы, состоит в том, что вы явно не вызываете возврат внутри функции на некоторые элементы, вызываемые с помощью предоставленной функции. В Javascript, явно не обращаясь к возврату, все равно вернется undefined.

Например, в следующем методе newArray будет установлен на вошедший результат:

[ undefined, 2, 3 ]

newArray = [1,2,3].map(function(elem) { if (elem > 1) return elem }) 
console.log(newArray) 

Вот почему ответ Приведенный выше больше не будет приводить к undefined элементов в новом массиве , Условие будет разрешено, если условие res.compareSelected == true неверно для оператора return в блоке else (обратите внимание, что здесь вы можете просто удалить true и просто поставить res.compareSelected, что было бы лучше).

На основе вашего вопроса вы можете найти метод Array.filter для возврата Array без неопределенных значений. И только с теми значениями, которые вы назвали функцией data.getTalentProfileInfo(res.RES.RES_ID).

Вы можете сделать это следующим образом:

var onCompareSelectedClick = function() { 
    var arr = appliedResourcesEntries.map(function(res) { 
     if(res.compareSelected == true) { 
      return data.getTalentProfileInfo(res.RES.RES_ID); 
     } 
    }); 
    var talentProfileInfoForAppliedResources = arr.filter(function(elem) { 
     return elem; 
    }); 
console.log(talentProfileInfoForAppliedResources); 
this.openCompareTPDlg(talentProfileInfoForAppliedResources); 
}.bind(this); 

You can read about the Array.filter method here.

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