如何通过特定字符串过滤对象

问题描述

我想使用字符串值过滤数组(仅显示包含此字符串或其一部分的行)。

例如,我有那个对象:

0: {CurrentDriverElement: null,FullName: "1043 TU 147",FullName2: null,FuelTheoreticalCosumptionAvg: 0,FuelTypeEnum: 2,…}
1: {CurrentDriverElement: null,FullName: "5076 TU 162",FullName2: "",…}
2: {CurrentDriverElement: null,FullName: "test ET7 mycom ",FuelTypeEnum: -1,…}
3: {CurrentDriverElement: null,FullName: "test analog",…}
4: {CurrentDriverElement: null,FullName: "5217 TU 185",…}

Rq:这只是一个例子。

为此,我现在将“ test”作为字符串,结果应为:

2: {CurrentDriverElement: null,…}

因为“测试ET7”和“测试模拟”具有字符串“ test”。

例如,如果我有该对象,我还需要在这里测试每个列和字段:

0: {CurrentDriverElement: null,…}
2: {CurrentDriverElement: "test LA ",…}
    3: {CurrentDriverElement: null,…}
    4: {CurrentDriverElement: null,…}

在这里您找到U:

 0: {CurrentDriverElement: null,…}
    1: {CurrentDriverElement: null,…}
    2: {CurrentDriverElement: "test LA ",…}

解决方法

您可以使用getLogger

import org.apache.logging.log4j.*;

public class LogManager {
    private static final Logger logger = Logger.getLogger(LogManager.class);
,

array.filter(item => item.FullName.includes('test'));

,

作为includes()方法的替代方法,您可以使用indexOf()方法:

---------------------------------------------------------------------------
OptionError                               Traceback (most recent call last)
~/admvenv/lib/python3.7/site-packages/pandas/io/excel/_base.py in __new__(cls,path,engine,**kwargs)
    630                 try:
--> 631                     engine = config.get_option(f"io.excel.{ext}.writer")
    632                     if engine == "auto":

~/admvenv/lib/python3.7/site-packages/pandas/_config/config.py in __call__(self,*args,**kwds)
    230     def __call__(self,**kwds):
--> 231         return self.__func__(*args,**kwds)
    232 

~/admvenv/lib/python3.7/site-packages/pandas/_config/config.py in _get_option(pat,silent)
    101 def _get_option(pat,silent=False):
--> 102     key = _get_single_key(pat,silent)
    103 

~/admvenv/lib/python3.7/site-packages/pandas/_config/config.py in _get_single_key(pat,silent)
     87             _warn_if_deprecated(pat)
---> 88         raise OptionError(f"No such keys(s): {repr(pat)}")
     89     if len(keys) > 1:

OptionError: "No such keys(s): 'io.excel..writer'"

During handling of the above exception,another exception occurred:

ValueError                                Traceback (most recent call last)
<ipython-input-16-80bc8a5d0d2f> in <module>
----> 1 save_xls([df1,df2],os.getcwd())

<ipython-input-15-0d1448e7aea8> in save_xls(list_dfs,xls_path)
      1 def save_xls(list_dfs,xls_path):
----> 2     with ExcelWriter(xls_path) as writer:
      3         for n,df in enumerate(list_dfs):
      4             df.to_excel(writer,'sheet%s' % n)
      5         writer.save()

~/admvenv/lib/python3.7/site-packages/pandas/io/excel/_base.py in __new__(cls,**kwargs)
    633                         engine = _get_default_writer(ext)
    634                 except KeyError:
--> 635                     raise ValueError(f"No engine for filetype: '{ext}'")
    636             cls = get_writer(engine)
    637 

ValueError: No engine for filetype: ''

一个例子:

let result = arr.filter(f=> f.FullName.indexOf('test'))

,

要测试所有字段,可以使用Object.values来返回所有值

[{CurrentDriverElement: null,FullName: "1043 TU 147",FullName2: null,FuelTheoreticalCosumptionAvg: 0,FuelTypeEnum: 2},{CurrentDriverElement: null,FullName: "5076 TU 162",FullName2: "",FullName: "test ET7 mycom ",FuelTypeEnum: -1},FullName: "test analog",FullName: "5217 TU 185",FuelTypeEnum: 2}].filter(e => {
return Object.values(e).some(value => /test/.test(value))
})

我认为Regexp是比以下更干净的解决方案:

[].filter(e => {
return Object.values(e).some(value => value && typeof value.includes === 'function' &&  value.includes('test'))
})

未定义数字-因此,您必须测试值是否存在以及如果可以在该值上调用includes方法