Возвращаемый массив Вместо строки

#javascript

#язык JavaScript

Вопрос:

Я пытаюсь получить ответ массива от своей getTeam() функции, чтобы я мог правильно отфильтровать свои данные, чтобы показать более одной команды для текущего игрока (если они входят в более чем одну команду).

Фильтр таблиц данных:

 $.fn.dataTable.ext.search.push( //creating my own filter function for the table  function(settings, searchData, index, rowData, counter, statusClass) {    var userName = searchData[1]; //created a var to search through the 3rd column (0 index) which contains all of the Monday Dates  var searchTeam = searchData[0];  // Get Datatables API  var api = $.fn.dataTable.Api('#myTable');   if (settings.sTableId === 'myTable' ) {  if(userName === thisUserTitle){  return true;  } else {  return false;  }    }  if (settings.sTableId === 'certificateTable' ) {  if(currentTeam === searchTeam){  return true;  } else {  return false;  }    }  return true;  }  ); 

Исходный фрагмент, который возвращает только первую команду:

 var teamData = [{  "Team" : "Team 1",  "Players" :[   "Beerus Dev",  "Goten Dev",  "Trunks Dev",  "Majin Bu Dev"   ] }, {  "Team" : "Team 2",  "Players" : [  "Beerus Dev",  "Shap Dev",  "Krillin Dev"  ] } ];   function getTeam() {   const team = teamData.find(team =gt; team.Players.includes(currentUser));  return team.Team; }  var currentUser = "Beerus Dev"; var currentTeam = getTeam(currentUser);   console.log(currentTeam);  

Чтобы получить ответ массива, я попытался использовать .filter() вместо .find() него, но в итоге в качестве ответа получил пустой массив.

 var teamData = [{  "Team" : "Team 1",  "Players" :[   "Beerus Dev",  "Goten Dev",  "Trunks Dev",  "Majin Bu Dev"   ] }, {  "Team" : "Team 2",  "Players" : [  "Beerus Dev",  "Shap Dev",  "Krillin Dev"  ] } ];  var currentUser = "Beerus Dev";  const team = teamData.filter(function(team, i){  return teamData[i].Players.includes(currentUser); })  console.log(team) 

Комментарии:

1. Извините, это была опечатка с моей стороны. Это дает ответ, но возвращает все данные команды вместо для в этом примере [«Команда 1», «Команда 2»]

2. я запустил этот код точно так, как вы опубликовали (версия фильтра), и получил массив с двумя записями в нем. Должно быть, что-то сломано в вашем коде где-то еще. Этот код работает.

3. Ты можешь попробовать reduce .

4. Не может размножаться.

Ответ №1:

Упростите этот код:

 var teamData = [{  "Team" : "Team 1",  "Players" :[   "Beerus Dev",  "Goten Dev",  "Trunks Dev",  "Majin Bu Dev"   ] }, {  "Team" : "Team 2",  "Players" : [  "Beerus Dev",  "Shap Dev",  "Krillin Dev"  ] } ];  var currentUser = "Beerus Dev"; const team = teamData.filter(team =gt; team.Players.includes(currentUser)).map(team =gt; team.Team);  console.log(team) 

Комментарии:

1. Или даже дальше: filter(({ Players }) =gt; Players.includes(currentUser)) . Это на самом деле не отвечает на вопрос, тхо

2. Нет ограничений на рефакторинг))

3. Смотрите, это возвращает весь набор данных, который я пытаюсь отфильтровать, мне нужно получить Team 1, Team 2 как единственные возвращенные элементы.

4. Только что видел вашу правку, это именно то, что я пытался сделать. Большое спасибо

5. Добро пожаловать))