使用 `eval()` 的替代方法 - 过滤产品
Alternative for using `eval()` - Filter products
我目前正在尝试在我的软件中构建一个过滤系统,这就是我在下面所拥有的,正如您所看到的,我正在使用 eval()
并且想要一个我不想要的解决方案需要使用 eval()
,有人有什么建议吗?
const items = [{
Product: {
name: 'Hello',
which: 1
},
Finance: {
zero: 0
}
},
{
Product: {
name: 'Hello2',
which: 0
},
Finance: {
zero: 0
}
}];
const filterMenu = [{
name: 'text1',
filterKey: 'Finance.zero == 0',
subText: false
}, {
name: 'text3',
filterKey: 'Product.which == 0',
subText: false
}];
const filteredBy = [0, 1];
const filtered = items.filter(e => eval(filteredBy.map(item => "e." + filterMenu[item].filterKey).join(' && ')));
console.log(filtered);
我建议将过滤器存储为对象而不是字符串。这样您就可以通过 every() 方法检查每个 filterKey
。
const items = [
{
Product: { name: 'Hello', which: 1 },
Finance: { zero: 0 },
},
{
Product: { name: 'Hello2', which: 0 },
Finance: { zero: 0 },
}];
const filterMenu = [
{
name: 'text1',
filterKey: { group: 'Finance', key: 'zero', value: 0 },
subText: false,
},
{
name: 'text3',
filterKey: { group: 'Product', key: 'which', value: 0 },
subText: false,
}
];
const filtered = items.filter(( item ) => {
return filterMenu.every(( filter ) => {
const { group, key, value } = filter.filterKey;
return item[group][key] === value;
});
});
console.log(filtered);
我目前正在尝试在我的软件中构建一个过滤系统,这就是我在下面所拥有的,正如您所看到的,我正在使用 eval()
并且想要一个我不想要的解决方案需要使用 eval()
,有人有什么建议吗?
const items = [{
Product: {
name: 'Hello',
which: 1
},
Finance: {
zero: 0
}
},
{
Product: {
name: 'Hello2',
which: 0
},
Finance: {
zero: 0
}
}];
const filterMenu = [{
name: 'text1',
filterKey: 'Finance.zero == 0',
subText: false
}, {
name: 'text3',
filterKey: 'Product.which == 0',
subText: false
}];
const filteredBy = [0, 1];
const filtered = items.filter(e => eval(filteredBy.map(item => "e." + filterMenu[item].filterKey).join(' && ')));
console.log(filtered);
我建议将过滤器存储为对象而不是字符串。这样您就可以通过 every() 方法检查每个 filterKey
。
const items = [
{
Product: { name: 'Hello', which: 1 },
Finance: { zero: 0 },
},
{
Product: { name: 'Hello2', which: 0 },
Finance: { zero: 0 },
}];
const filterMenu = [
{
name: 'text1',
filterKey: { group: 'Finance', key: 'zero', value: 0 },
subText: false,
},
{
name: 'text3',
filterKey: { group: 'Product', key: 'which', value: 0 },
subText: false,
}
];
const filtered = items.filter(( item ) => {
return filterMenu.every(( filter ) => {
const { group, key, value } = filter.filterKey;
return item[group][key] === value;
});
});
console.log(filtered);