我想在array filter
中应用两个条件。
实际上,我有以下代码:
arr = arr.filter(
a => a.color != $(this).data('color'),
b => b.name != $(this).data('name')
);
如何指定我需要过滤颜色和名称?
答案 0 :(得分:0)
使用&&运算符检查两个条件
let arr = [
{color: 'blue', name: 'sky'},
{color: 'red', name: 'foo'},
{color: 'yellow', name: 'submarine'},
{color: 'red', name: 'velvet'}
];
arr = arr.filter(a => a.color !== $('#example').data('color') && a.name !== $('#example1').data('name'));
console.log(arr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="example" data-name="sky" data-color="blue">
</div>
答案 1 :(得分:0)
您可以编写一个用于组合谓词的小工具:
const pred = (() => {
const and = p1 => p2 => x => p1(x) && p2(x)
const or = p1 => p2 => x => p1(x) || p2(x)
return { and, or }
})()
// ...
const isntSomeColor = a => a.color != $(this).data('color')
const isntSomeName = b => b.name != $(this).data('name')
const result = input.filter(pred.and(isntSomeColor)(isntSomeName))
一般而言,布尔连词和析取词均会形成等分线,而返回等分线的函数也会形成等分线。因此,如果您正在使用某些功能性编程库,则也可以这样做:
const preds = [
a => a.color != $(this).data('color'),
b => b.name != $(this).data('name')
]
const result = input.filter(arr.fold(fn(and))(preds))