Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度-根据另一个对象数组中的值筛选对象数组_Angular - Fatal编程技术网

Angular 角度-根据另一个对象数组中的值筛选对象数组

Angular 角度-根据另一个对象数组中的值筛选对象数组,angular,Angular,我必须根据一些首选项过滤对象数组 我需要筛选的数组如下所示: const products = [ {value: 'v1', color: 'blue'}, {value: 'v1', color: 'black'}, {value: 'v1', color: 'red'}, {value: 'v2', color: 'green'}, {value: 'v2', color: 'red'}, {value: 'v3', color: 'red'

我必须根据一些首选项过滤对象数组

我需要筛选的数组如下所示:

const products = [
    {value: 'v1', color: 'blue'},
    {value: 'v1', color: 'black'},
    {value: 'v1', color: 'red'},
    {value: 'v2', color: 'green'},
    {value: 'v2', color: 'red'},
    {value: 'v3', color: 'red'},
    {value: 'v4', color: 'blue'}
]
const preferences = [
    {type: {value: 'v1', label: 'l1'}, color: 'blue'},
    {type: {value: 'v1', label: 'l1'}, color: 'red'},
    {type: {value: 'v2', label: 'l2'}, color: 'blue'},    
    {type: {value: 'v3', label: 'l3'}, color: 'red'},
    {type: {value: 'v4', label: 'l4'}, color: 'green'}
]
首选项如下所示:

const products = [
    {value: 'v1', color: 'blue'},
    {value: 'v1', color: 'black'},
    {value: 'v1', color: 'red'},
    {value: 'v2', color: 'green'},
    {value: 'v2', color: 'red'},
    {value: 'v3', color: 'red'},
    {value: 'v4', color: 'blue'}
]
const preferences = [
    {type: {value: 'v1', label: 'l1'}, color: 'blue'},
    {type: {value: 'v1', label: 'l1'}, color: 'red'},
    {type: {value: 'v2', label: 'l2'}, color: 'blue'},    
    {type: {value: 'v3', label: 'l3'}, color: 'red'},
    {type: {value: 'v4', label: 'l4'}, color: 'green'}
]
过滤器应返回与首选项的值和颜色匹配的所有对象。 因此,期望的结果应该是:

[
    {value: 'v1', color: 'blue'},
    {value: 'v1', color: 'red'},
    {value: 'v3', color: 'red'},
]
我已尝试使用我找到的示例中的以下函数:

问题是我需要将首选项转换为表单的筛选条件:

{color: x => x === 'red', type: y => y === 'v1' || y === 'v3'},
{color: x => x === 'blue', type: y => y === 'v1' || y === 'v2'},
{color: x => x === 'green', type: y => y === 'v4'}
我该怎么做?还是有更好的办法解决这个问题

提前感谢您的帮助

您可以选择这些产品,这样,如果首选项具有匹配项,则选择该产品

const产品=[
{值:'v1',颜色:'blue'},
{值:'v1',颜色:'black'},
{值:'v1',颜色:'red'},
{值:'v2',颜色:'green'},
{值:'v2',颜色:'red'},
{值:'v3',颜色:'red'},
{值:'v4',颜色:'blue'}
];
常量首选项=[
{类型:{值:'v1',标签:'l1'},颜色:'blue'},
{类型:{值:'v1',标签:'l1'},颜色:'red'},
{类型:{值:'v2',标签:'l2'},颜色:'blue'},
{类型:{值:'v3',标签:'l3'},颜色:'red'},
{类型:{值:'v4',标签:'l4'},颜色:'green'}
];
const filtered=products.filter(a=>preferences.some(b=>b.type.value==a.value&&b.color==a.color));

console.log(过滤)试试这个,我已经根据您的用例对它进行了测试。它工作得很好

var final = [];
for(let i=0 ; i<products.length; i++){
    preferences.map((data)=>{
        if(data.color === products[i].color && data.type.value === products[i].value){
            final.push(data);
        }
    })

}
console.log(final)
var final=[];
for(设i=0;i{
if(data.color==products[i].color&&data.type.value==products[i].value){
最终推送(数据);
}
})
}
console.log(最终版)

感谢您的支持。我已经接受了Reactgular的awnser,因为这是第一个解决我问题的awnser。