Javascript 如何匹配对象的多个属性

Javascript 如何匹配对象的多个属性,javascript,jquery,Javascript,Jquery,我可以很容易地匹配一个属性 var peoples = [ { "name": "bob", "dinner": "pizza" }, { "name": "john", "dinner": "sushi" }, { "name": "larry", "dinner"

我可以很容易地匹配一个属性

var peoples = [
  { "name": "bob", "dinner": "pizza" },
  { "name": "john", "dinner": "sushi" },
  { "name": "larry", "dinner": "hummus" },
  { "name": "john", "dinner": "pie" }
];

$.each(peoples, function(i, val) {
    $.each(val, function(key, name) {
        if (name === "john")
            console.log(key + " : " + name);
       });
});
但是既然有两个john,我如何匹配一个特定的john(例如喜欢sushi的john),然后返回整个匹配的对象(json)?我试图在if语句中添加另一个条件,但这似乎不起作用

谢谢

您可以使用来检查精确匹配

var=[
{“姓名”:“鲍勃”,“晚餐”:“比萨饼”},
{“姓名”:“约翰”,“晚餐”:“寿司”},
{“名字”:“拉里”,“晚餐”:“鹰嘴豆泥”},
{“姓名”:“约翰”,“晚餐”:“派”}
];
var filteredResult=peoples.find(val=>val.name==“john”和&val.dinner==“sushi”);

log(filteredResult)
考虑以下几点

var=[{
“姓名”:“鲍勃”,
“晚餐”:“比萨饼”
},
{
“姓名”:“约翰”,
“晚餐”:“寿司”
},
{
“姓名”:“拉里”,
“晚餐”:“鹰嘴豆泥”
},
{
“姓名”:“约翰”,
“晚餐”:“馅饼”
}
];
美元。每个(人、功能(i、val){
如果(val.name==“约翰”&&val.晚餐==“寿司”){
console.log(“Persons[“+i+”]”.“+Object.keys(val)[0]+”:“+val.name”);
}
});

我不知道上下文,但可能有两个john和他们都将晚餐属性设置为pie。我建议对数组中的每个条目使用id。如果正在使用的数组是您列出的数组,则可以在执行搜索之前使用
map
对其进行投影/变换。比如说

const people=[
{姓名:“鲍勃”,晚餐:“披萨”},
{名字:“约翰”,晚餐:“寿司”},
{名字:“拉里”,晚餐:“鹰嘴豆泥”},
{名字:“约翰”,晚餐:“派”},
];
constpeoplelist=people.map((person,id)=>({id,…person}));
console.log(peopleList);

//您可以从这里开始按id进行搜索
您可以设置一个函数来定义搜索词,然后使用
数组。过滤器

const peoples = [
  { "name": "bob", "dinner": "pizza" },
  { "name": "john", "dinner": "sushi" },
  { "name": "larry", "dinner": "hummus" },
  { "name": "john", "dinner": "pie" }
];

searchTerms = (person) => {
  return person.name === "john" && person.dinner === "sushi";
}

console.log(peoples.filter(searchTerms));

// [{ "name": "john", "dinner": "sushi" }]
_.用lodash过滤 您可以使用lodash的过滤方法 迭代集合的元素,返回一个包含所有元素的数组。谓词返回truthy for。谓词由三个参数调用:(value,index | key,collection)。它返回一个新数组

在lodash上使用过滤器的示例

var用户=[{
“用户”:“巴尼”,
年龄:36岁,,
“活动”:true
},
{
'用户':'弗雷德',
年龄:40岁,,
“活动”:false
},
{
'用户':'弗雷德',
年龄:39岁,,
“活动”:true
}
];
console.log(“匹配项:”,u.filter(用户,函数(o)){
返回;
}));
//=>[{活动:真,年龄:36,用户:“barney”}]
//“\.匹配”iteratee速记。
console.log(“\u0.matches`iteratee”,\u0.filter(用户{
'用户':'弗雷德',
“活动”:true
}));
//=>[{活动:真,年龄:39,用户:“fred”}]
//“\uuu.matchesProperty”迭代速记。
log(“matchs poperty”,u.filter(users,['active',false]);
//=>用于['fred']的对象
//“\.property”iteratee速记。
_.过滤器(用户,“活动”);
//=>对象用于['barney']

谢谢。但是,我试图避免使用.find(),因为我认为它与Internet Explorer不兼容。哦,它没有提到您需要IE,那么您可以这样尝试。常量输出={}<代码>$.each(人,函数(i,val){if(val.name==“john”&&val.dinner==“sushi”){output=val;})谢谢。如果你得到了预期的答案,那就太好了。谢谢。知道这一点真的很有用,而且对于这样一个全面的答案可能会有帮助。这里有很多选择。