过滤对象中的字符串和空值

时间:2020-01-08 17:25:04

标签: javascript

当对象的属性值为null或包含“缺失”时,应过滤整个对象。

这适用于过滤null

object = (object.filter(o => !Object.values(o).includes(null)) 

但是我如何添加2个过滤器以及如何实现一个过滤器来过滤包含“ missing”一词的字符串

  object = (object.filter(o => !Object.values(o).includes(null) | ("missing")));

对象:

[
      { id: 'blockstack-iou',
        name: 'Blockstack (IOU)',
        image: 'missing_large.png'
      }
      { id: 'qtum',
        name: 'Qtum',
        image:
         'https://assets.coingecko.com/coins/images/684/large/qtum.png?1547034438',
        price_change_percentage: -53.2869774915231
      }
    ]

3 个答案:

答案 0 :(得分:3)

使用Array.prototype.every()

使用&&组合多个测试。

let object = [{
    id: 'blockstack-iou',
    name: 'Blockstack (IOU)',
    image: 'missing_large.png'
  },
  {
    id: 'qtum',
    name: 'Qtum',
    image: 'https://assets.coingecko.com/coins/images/684/large/qtum.png?1547034438',
    price_change_percentage: -53.2869774915231
  }
];

console.log(object.filter(o => Object.values(o).every(prop => 
  prop != null && !prop.toString().includes("missing"))));

答案 1 :(得分:1)

如果您正在寻找一种易于扩展的解决方案,请考虑将所有“条件”存储为数组,并使用.every()遍历它们。

const object = [
  {str: "this_is_missing"},
  {str: null},
  {str: "valid"}
];

const validations = [
  i => i !== null,                          //Value isn't null
  i => !i.toString().includes("missing")    //Value doesn't contain "missing"
];

const validate = (val) => validations.every(fn => fn(val));

const result = object.filter(obj => Object.values(obj).every(validate));
console.log(result);

答案 2 :(得分:1)

使用&&匹配

const object = [
    {id: 'blockstack-iou',
     name: 'Blockstack (IOU)',
     image: 'missing_large.png'
    },
    { id: 'qtum',
    name: 'Qtum',
    image:
    'https://assets.coingecko.com/coins/images/684/large/qtum.png?1547034438',
    price_change_percentage: -53.2869774915231
    }
  ]
const filtered = (object.filter(o =>!Object.values(o).includes(null) && !Object.values(o).toString().match(/missing/gi)));
console.log(filtered)