对象的通配符筛选器数组-Javascript

对象的通配符筛选器数组-Javascript,javascript,arrays,lodash,Javascript,Arrays,Lodash,如何在对象数组上实现通配符过滤器?即使过滤器从一开始就可以工作,也应该可以。应该能够过滤对象的所有属性 应该以与lodash过滤器相同的方式工作,但通配符过滤器也可以工作。谢谢 const sampleProducts=[{ 颜色:“红色”, 值:'#f00', }, { 颜色:“绿色”, 值:'#0f0', }, { 颜色:“蓝色”, 值:'#00f', }, { 颜色:“青色”, 值:“#0ff”, }, { 颜色:'洋红色', 值:“#f0f”, }, { 颜色:'黄色', 值:'#ff

如何在对象数组上实现通配符过滤器?即使过滤器从一开始就可以工作,也应该可以。应该能够过滤对象的所有属性

应该以与lodash过滤器相同的方式工作,但通配符过滤器也可以工作。谢谢

const sampleProducts=[{
颜色:“红色”,
值:'#f00',
},
{
颜色:“绿色”,
值:'#0f0',
},
{
颜色:“蓝色”,
值:'#00f',
},
{
颜色:“青色”,
值:“#0ff”,
},
{
颜色:'洋红色',
值:“#f0f”,
},
{
颜色:'黄色',
值:'#ff0',
},
{
颜色:'黑色',
值:'#000',
},
];
常量筛选结果sobj={
颜色:“红色”
}
const filteredData=u.filter(sampleProducts,filteredResultsObj)
console.log(filteredData)

不使用lodash或下划线,您的用例可以通过以下方式处理

const sampleProducts = [{
    color: 'red',
    value: '#f00',
  },
  {
    color: 'green',
    value: '#0f0',
  },
  {
    color: 'blue',
    value: '#00f',
  },
  {
    color: 'cyan',
    value: '#0ff',
  },
  {
    color: 'magenta',
    value: '#f0f',
  },
  {
    color: 'yellow',
    value: '#ff0',
  },
  {
    color: 'black',
    value: '#000',
  },
];

var strToMatch = 'bl';

var filtered = sampleProducts.filter(function(p) {
  var colorArray = p.color.split('');
  var colorToMatch = [];
  for(var i = 0; i < strToMatch.length; i++) {
    colorToMatch.push(colorArray[i]);
  }
  return strToMatch.toLowerCase() == colorToMatch.join('').toLowerCase()
})

console.log(filtered)
const sampleProducts=[{
颜色:“红色”,
值:'#f00',
},
{
颜色:“绿色”,
值:'#0f0',
},
{
颜色:“蓝色”,
值:'#00f',
},
{
颜色:“青色”,
值:“#0ff”,
},
{
颜色:'洋红色',
值:“#f0f”,
},
{
颜色:'黄色',
值:'#ff0',
},
{
颜色:'黑色',
值:'#000',
},
];
var strToMatch='bl';
var filtered=sampleProducts.filter(函数(p){
var colorArray=p.color.split(“”);
var colorToMatch=[];
对于(变量i=0;i
不使用lodash或下划线,您的用例可以通过以下方式处理

const sampleProducts = [{
    color: 'red',
    value: '#f00',
  },
  {
    color: 'green',
    value: '#0f0',
  },
  {
    color: 'blue',
    value: '#00f',
  },
  {
    color: 'cyan',
    value: '#0ff',
  },
  {
    color: 'magenta',
    value: '#f0f',
  },
  {
    color: 'yellow',
    value: '#ff0',
  },
  {
    color: 'black',
    value: '#000',
  },
];

var strToMatch = 'bl';

var filtered = sampleProducts.filter(function(p) {
  var colorArray = p.color.split('');
  var colorToMatch = [];
  for(var i = 0; i < strToMatch.length; i++) {
    colorToMatch.push(colorArray[i]);
  }
  return strToMatch.toLowerCase() == colorToMatch.join('').toLowerCase()
})

console.log(filtered)
const sampleProducts=[{
颜色:“红色”,
值:'#f00',
},
{
颜色:“绿色”,
值:'#0f0',
},
{
颜色:“蓝色”,
值:'#00f',
},
{
颜色:“青色”,
值:“#0ff”,
},
{
颜色:'洋红色',
值:“#f0f”,
},
{
颜色:'黄色',
值:'#ff0',
},
{
颜色:'黑色',
值:'#000',
},
];
var strToMatch='bl';
var filtered=sampleProducts.filter(函数(p){
var colorArray=p.color.split(“”);
var colorToMatch=[];
对于(变量i=0;i
一种解决方案是使用每次迭代调用的函数,并测试与用户匹配的正则表达式。在本例中,正则表达式匹配以
bl开头的内容:

const sampleProducts=[
{颜色:'red',值:'#f00'},
{颜色:'绿色',值:'#0f0'},
{颜色:'blue',值:'#00f'},
{颜色:“青色”,值:'#0ff'},
{颜色:'洋红色',值:'#f0f'},
{颜色:'黄色',值:'#ff0'},
{颜色:“黑色”,值:'#000'}
];
常量regexp=/^bl/;
常量filteredata=u.filter(sampleProducts,(o)=>o.color.match(regexp));
console.log(filteredData)

一种解决方案是使用每次迭代调用的函数,并测试与用户匹配的正则表达式。在本例中,正则表达式匹配以
bl开头的内容:

const sampleProducts=[
{颜色:'red',值:'#f00'},
{颜色:'绿色',值:'#0f0'},
{颜色:'blue',值:'#00f'},
{颜色:“青色”,值:'#0ff'},
{颜色:'洋红色',值:'#f0f'},
{颜色:'黄色',值:'#ff0'},
{颜色:“黑色”,值:'#000'}
];
常量regexp=/^bl/;
常量filteredata=u.filter(sampleProducts,(o)=>o.color.match(regexp));
console.log(filteredData)

您可能需要在此处使用
RegExp

const sampleProducts=[{
颜色:“红色”,
值:'#f00',
},
{
颜色:“绿色”,
值:'#0f0',
},
{
颜色:“蓝色”,
值:'#00f',
},
{
颜色:“青色”,
值:“#0ff”,
},
{
颜色:'洋红色',
值:“#f0f”,
},
{
颜色:'黄色',
值:'#ff0',
},
{
颜色:'黑色',
值:'#000',
},
];
常数filterByValue=(coll,value)=>
_.filter(coll,u.flow(
_.价值观,
_.partiOkable(u0.some,0.method('match',new RegExp(value,'i'))
));
log(filterByValue(sampleProducts,'r')

您可能需要在此处使用
RegExp

const sampleProducts=[{
颜色:“红色”,
值:'#f00',
},
{
颜色:“绿色”,
值:'#0f0',
},
{
颜色:“蓝色”,
值:'#00f',
},
{
颜色:“青色”,
值:“#0ff”,
},
{
颜色:'洋红色',
值:“#f0f”,
},
{
颜色:'黄色',
值:'#ff0',
},
{
颜色:'黑色',
值:'#000',
},
];
常数filterByValue=(coll,value)=>
_.filter(coll,u.flow(
_.价值观,
_.partiOkable(u0.some,0.method('match',new RegExp(value,'i'))
));
log(filterByValue(sampleProducts,'r')

如果我的筛选条件是“bl”,我该如何处理?它应该返回相同的结果。更新的问题如果我的筛选条件是“bl”,我该怎么办?它应该返回相同的结果。更新的问题谢谢@Damien。我是否可以发送一个对象并进行过滤?谢谢更新问题。谢谢@Damien。我是否可以发送一个对象并进行过滤?谢谢更新了问题。最后是正确的正则表达式,大多数答案都丢失了
^
最后是正确的正则表达式,大多数答案都丢失了
^