Loda sh фильтрация по нескольким различным условиям в массиве объектов - PullRequest
0 голосов
/ 04 августа 2020

У меня есть массив объектов, преобразованных из файла CSV, и есть много ненужных значений (или значений, которые мне не нужны в остальной части моей программы).

{
  'Mailbox ID': '411042035',
  'First Name': 'Amy',
  'Last Name': 'Doe',
  Extension: '117444',
  Email: 'Amy.Doe@Doe.com',
  'Mobile Phone': '',
  Department: 'Department',
  'Job Title': '',
  Roles: 'Standard (International)',
  'User Groups': '',
  Site: '',
  'Cost Center Code': '',
  'Direct Number (DID)': '(555) 555-7804',
  'Phone Make/Model': '12x f56',
  'Ship to: Street Address - Line 1': '555 Main St',
  'Ship to: Street Address - Line 2': '',
  'Ship to: City': 'Philadelphia',
  'Ship to: State/Province/County': 'PA',
  'Ship to: Postal Code': '19000',
  'Ship to: Country': 'US',
  'Emergency Address': '555 Main St, 5TH FL, PHILADELPHIA, PA, 19000, US',
  'Emergency Response Location': '',
  'Fax Cover Page Address': '',
  'User Language': 'English (U.S.)',
  'Time Zone': '(GMT-05:00) Eastern Time (US & Canada)',
  Status: 'Enabled',
  'Assigned Call Queues': ''
}

Я хочу заполнить массив таких объектов, где

  • «Имя» не содержит «VE. 'и
  • ' Отделение 'не является' Врачом 'и
  • ' Расширение 'не начинается с' 73 'и
  • ' Электронная почта 'не заканчивается на' .comx 'и
  • начало «Email» не является строкой чисел.

Я хочу использовать Loda sh для добавления таких условий, но я не уверен синтаксис или возможности. Как мне также добавить условия в оператор?

это то, что у меня есть, и оно не работает:

 let records = await _.filter(RC_file_contents, (line) => {
        let _line = line;
        let data = [];
        if(!_line['First Name'].includes('VE.') && !_line['Department'] == 'Physician' && !_line['Email'].includes('.comx')){
            data.push(line)
        }
        return data
    })

1 Ответ

1 голос
/ 04 августа 2020

Здесь много чего происходит. Похоже, вы комбинируете разные методы. Метод фильтра определяет, сохранять ли элемент или нет, по возвращаемому значению обратного вызова. Если возвращаемое значение истинно, элемент сохраняется, если ложно, он удаляется. Основная причина, по которой он не работает, заключается в том, что вы возвращаете массив data для каждого элемента. Массив имеет значение truthy, поэтому элементы не удаляются.

Вы можете сделать это без loda sh, так как массивы уже имеют .filter.

_. Filter не asyn c, поэтому вам не нужен await

let records = RC_file_contents.filter(_line => {
  // Return true or false to keep or remove the item
  return (
    !_line['First Name'].includes('VE.')
    && _line.Department !== 'Physician'
    && !/^73/.test(_line.Extension) // Use regex to test what extension starts with (^)
    && !/\.comx$/.test(_line.Email) // Use regex to test what email ends with ($)
    && !/^\d{3,}/.test(_line.Email) // Email doens't start with 3 or more numbers
  );
})
...