#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. Добро пожаловать))