Javascript 按类型筛选数组对象,并将键值与对象进行比较

Javascript 按类型筛选数组对象,并将键值与对象进行比较,javascript,angular,typescript,Javascript,Angular,Typescript,我有点被困在这里,正在寻找一个可能的简单解决方案 我有一个像下面这样的物体 personObj = { catname: "somecat" ,catname2: "somecat", dogname: "ruff", horsename: "sam"}; 然后arrayObject像 personArr = [ { key: "a1", value: "catname" type: "cat" }, { key: "a2", value: "catname2", type: "ca

我有点被困在这里,正在寻找一个可能的简单解决方案

我有一个像下面这样的物体

personObj  = { catname: "somecat" ,catname2: "somecat", dogname: "ruff", horsename: "sam"};
然后
arrayObject

personArr = [
  { key: "a1", value: "catname" type: "cat" },
  { key: "a2", value: "catname2", type: "cat" },
  { key: "a3", value: "somedog" type: "dog" },
  { key: "a4", value: "horsename" type : "horse }
];
如何创建一个函数,在
personArr
中按
类型过滤所有值,然后检查是否有
personObj
键与
personArr
值匹配,如果是,则返回
布尔值

filterAndCheckMatchedObj('cat', personObj) {

  //logic 

  // Filtered by cat  2 matches (catname and catname2) 

  return true
}
我用的是角4和离子

这有意义吗?任何帮助都将不胜感激

试试这个

var personObj={catname:“somecat”,catname2:“somecat”,dogname:“ruff”,horsename:“sam”}
var personArr=[{“key”:“a1”,“value”:“catname”,“type”:“cat”},{“key”:“a2”,“value”:“catname2”,“type”:“cat”},{“key”:“a3”,“value”:“somedog”,“type”:“dog”},{“key”:“a4”,“value”:“horsename”,“type”:“horse”});
函数查找(类型,personObj){
返回personArr.filter(item=>item.type==type).filter(item=>(personObj中的item.value)).length!==0
}

log(find('cat',personObj))
为了过滤parsonArr,您需要它是一个数组:

personArr  = [
    { key: "a1", value: "catname", type: "cat" },
    { key: "a2", value: "catname2", type: "cat" },
    { key: "a3", value: "somedog", type: "dog" },
    { key: "a4", value: "horsename", type : "horse" }
];
请注意,每个key:value都需要分隔的逗号(您有时会漏掉它)。此外,您忘了用

在函数声明中,您不传递参数,只需声明它们:

filterAndCheckMatchedObj(animalType, personObj) {
    const filteredParsonArr = personArr.filter(person => person.type === animalType);
}
现在您需要personArr和personObj之间的任何关系

var personObj = { catname: "somecat",
                   catname2: "somecat",
                   dogname: "ruff",
                   horsename: "sam"
                 };
最后一件事:

我建议您更改变量名称。 让personArr和他的物品描述动物是没有意义的

总而言之:

const personArr=[
{键:“a1”,值:“catname”,类型:“cat”},
{键:“a2”,值:“catname2”,类型:“cat”},
{键:“a3”,值:“somedog”,类型:“dog”},
{键:“a4”,值:“horsename”,类型:“horse”}
];
const personObj={catname:“somecat”,catname2:“somecat”,dogname:“ruff”,horsename:“sam”}
函数过滤器和检查匹配Dobj(动物类型,personObj){
返回personArr.some(animal=>animal.type===animalType&&
(以personObj表示的动物价值)
);
}
警报(filterAndCheckMatchedObj('cat',personObj));//真的

警报(filterAndCheckMatchedObj('fish',personObj));//false
很难理解您在这里想要实现的目标。但据我所知,你:

  • 要为
    类型
    筛选
    角色
  • 然后,您需要检查
    personObj
    中的
    是否与过滤后的
    personArr
    中的
    键的
    匹配
  • 在这种情况下,返回
    true
    。否则返回
    false
  • 因此,请尝试一下:

    var personObj={
    猫名:“somecat”,
    猫名2:“某只猫”,
    狗名:“拉夫”,
    马名:“山姆”
    };
    var personArr=[
    {“key”:“a1”,“value”:“catname”,“type”:“cat”},
    {“键”:“a2”,“值”:“catname2”,“类型”:“cat”},
    {“key”:“a3”,“value”:“somedog”,“type”:“dog”},
    {“键”:“a4”,“值”:“马名”,“类型”:“马”}
    ];
    函数查找(类型,personObj){
    var filteredArray=personArr.filter(item=>item.type==type);
    var objectKeys=Object.keys(personObj);
    var arrayValues=filteredArray.map(item=>item.value);
    返回objectKeys.filter(元素=>ArrayValue.includes(元素)).length>0;
    }
    
    console.log(find('cat',personObj))
    不是有效的JSON->
    personArr
    如何
    返回personArr.some(item=>item.type==type&(personObj中的item.value))