Как я могу отфильтровать конкретные данные для отображения в таблице данных angular

#angular #typescript

#angular #typescript

Вопрос:

введите описание изображения здесь

Я должен работать над проектом с использованием фреймворков angular 7. У меня много данных для чтения и отображения. однако из предоставленных необработанных данных я должен удалить пробные модули на основе данных ‘userName’.

у меня другое имя пользователя, чем для данных ‘userName’. как, например, указано: user22abc @ngul, user23abc @ ngul, user67abc @ ngul и т.д. … это пример «имени пользователя», которое необходимо удалить, поскольку на самом деле указывает на пробную версию. поэтому мне нужно знать, какой конкретный синтаксис я могу применить в своем письме. Спасибо!

У меня есть 50 пробных единиц из моих необработанных данных, и мне нужно удалить их все. Может ли кто-нибудь подсказать мне, что и где использовать, поскольку текущий код не сработал, чтобы решить проблему? Я уже просматриваю образцы и решения, но я не в состоянии это хорошо понять. при этом я приложил пример кодирования.

Спасибо.

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

1. вы можете создать канал для фильтрации данных, а также опубликовать код, который вы уже пробовали

2. привет, я прикрепил образец на картинке выше. Спасибо,

Ответ №1:

Я не уверен в точной структуре ваших данных, которые вы хотите отобразить в вашей таблице данных, но я предполагаю наиболее распространенный вариант использования, который представляет собой массив объектов в формате, подобном этому:

 const original = [
  {
    userName: 'user22abc@ngu',
    name: 'aaa',
    id: 'aaa1'
  },
  {
    userName: 'user33azzz@ngu',
    name: 'bbb',
    id: 'bbb1'
  },
]
  

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

 const filteredCopy = [...original].filter(row => row['username'] !== 'user22abc');
console.log(filteredCopy);
  

РЕДАКТИРОВАТЬ: Если нам нужно отфильтровать их из массива имен пользователей, мы должны внести некоторые изменения. Пользовательская функция, которую я передал filter(), фактически проверяет выполнение двух условий:

1) Я использовал includes(), который фактически проверяет, содержит ли массив имен пользователей имя пользователя для этого конкретного элемента. Отрицая это утверждение (используя ! ), я по существу вернул элементы, имя пользователя которых не является частью usernameList массива.

2) Я проверил, соответствуют ли начальные 4 символа имени пользователя строке user .

 const original = [
  {
    username: 'user22abc@ngu',
    name: 'aaa',
    id: 'aaa1'
  },
  {
    username: 'user33azzz@ngu',
    name: 'bbb',
    id: 'bbb1'
  },
  {
    username: 'user11@ngu',
    name: 'bbb',
    id: 'bbb1'
  },
  {
    username: 'bzzzz@ngu',
    name: 'bbab',
    id: 'bbb12'
  },
]

const usernameList = ['user22abc@ngu', 'user11@ngu'];

const filtering = usernameList => {
  const filteredCopy = [...original].filter(row => !usernameList.includes(row['username']) amp;amp; row['username'].substring(0,4) === 'user');
  return filteredCopy;
}

filtering(usernameList);
  

Обратите внимание, что .includes() является частью ES7, поэтому не поддерживается некоторыми старыми браузерами, такими как Internet Explorer.

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

1. Хотя я предложил небольшое редактирование. Это должна быть строка [‘username’]!== ‘user22abc’

2. @VikhyathMaiya Ах да! Спасибо, что исправили эту ошибку!

3. @wnf9543 хорошо, итак, вы передаете userName , что на самом деле является переменной?

4. Или подождите, вы имеете в виду, что они поступают в виде массива? По сути, мы должны отфильтровать массив имен пользователей?

5. @wentjun спасибо за решение! в настоящее время работаю над этим, поскольку это соответствует моим требованиям. 🙂

Ответ №2:

Попробуйте это

 this.newArray = new Array();
for(const entry of this.yourArray) {
 if(entry.userName !== 'user22abc@ngul')
  this.newArray.push(entry.userName)
}
  

Ответ №3:

Из вашего кода я понимаю, что вы хотите удалить те объекты из массива, userName ключом user22abc@ngul которых является. Для этого вы можете использовать фильтры, как показано ниже

 this.newArray = this.oldArray.filter((item) => item.userName !== 'user22abc@ngul')
  

Что будет делать приведенный выше код, так это то, что он отфильтрует все те объекты, имя пользователя которых не является user22abc@ngul . Надеюсь, это поможет.

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

1. привет, спасибо за ответ. у меня другое имя пользователя, чем для данных ‘userName’. как, например, указано: пользователь22abc @ngul, пользователь23abc @ ngul, пользователь67abc @ ngul . это пример ‘userName’, который необходимо удалить, поскольку на самом деле указывает на пробную версию. поэтому мне нужно знать, какой конкретный синтаксис я могу применить в своем письме. Спасибо!

2. Откуда у вас эти имена пользователей. они находятся в любом виде массива или вы хотите просто жестко закодировать эти вещи

3. эти имена пользователей считываются из необработанных данных в json формате. для некоторого файла я уже применил тот же метод, что и предложено, и он работает ранее. но для этого файла он имеет разные символы, и, как я уже упоминал, у меня есть 50 пробных логинов , которые необходимо удалить.