Javascript 如何检查对象键是否在按数组键筛选的数组中?
我正在使用一款Angular 2 Ionic应用程序- 是否有一种方法可以在personsArr中按年龄筛选所有人员,然后查找personObj中的任何键是否与personArr名称匹配并返回布尔值 我有一个示例数组,如:Javascript 如何检查对象键是否在按数组键筛选的数组中?,javascript,typescript,Javascript,Typescript,我正在使用一款Angular 2 Ionic应用程序- 是否有一种方法可以在personsArr中按年龄筛选所有人员,然后查找personObj中的任何键是否与personArr名称匹配并返回布尔值 我有一个示例数组,如: personsArr = [{ "name": "Ram", "email": "ram@gmail.com", "age": 23 }, { "name": "peter", "
personsArr = [{
"name": "Ram",
"email": "ram@gmail.com",
"age": 23
},
{
"name": "peter",
"email": "shyam23@gmail.com",
"age": 23
},
{
"name": "John",
"email": "john@gmail.com",
"age": 33
},
{
"name": "Bob",
"email": "bob32@gmail.com",
"age": 41
}
]
还有像这样的物体
personObj = {
"peter": "helper",
"Ram": "helper",
"Bob": "helper"
}
如何按年龄筛选personsArr,然后检查personObj中的任何密钥是否与人名匹配
我很确定我可以通过一个循环来完成,但是有更好的方法吗
感谢任何帮助或建议 如果我理解正确,那么你需要这样的东西:
const isFound = personsArr.some((item) => item.age > 30 && personObj.includes(item.name));
当然,item.age>30应该替换为您的筛选条件。如果我理解正确,那么您需要以下内容:
const isFound = personsArr.some((item) => item.age > 30 && personObj.includes(item.name));
当然,item.age>30应该替换为您的筛选条件。给您
// Filter by age
const legalAge = 18 // for example
const boolean = personsArr
// Actual filtering
.filter(p => p.age > legalAge)
// Check if there is any `name` in personsArr matching any key in personObj
.some(p =>
Object.keys(personObj).some(pk => pk === p.name)
)
// Sort by age (maybe you meant this instead of filtering)
personsArr.sort((a, b) => a.age > b.age ? 1 : -1)
const boolean2 = personsArr.some(p =>
Object.keys(personObj).some(pk => pk === p.name)
)
给你
// Filter by age
const legalAge = 18 // for example
const boolean = personsArr
// Actual filtering
.filter(p => p.age > legalAge)
// Check if there is any `name` in personsArr matching any key in personObj
.some(p =>
Object.keys(personObj).some(pk => pk === p.name)
)
// Sort by age (maybe you meant this instead of filtering)
personsArr.sort((a, b) => a.age > b.age ? 1 : -1)
const boolean2 = personsArr.some(p =>
Object.keys(personObj).some(pk => pk === p.name)
)
不管你是否自己循环,都会涉及到循环。最简单的答案可能是使用Array.filter 下面是一个完整的示例:
const personsArr = [
{ "name": "Ram", "email": "ram@gmail.com", "age": 23 },
{ "name": "peter", "email": "shyam23@gmail.com", "age": 23 },
{ "name": "John", "email": "john@gmail.com", "age": 33 },
{ "name": "Bob", "email": "bob32@gmail.com", "age": 41 }
];
const personObj = { "peter": "helper", "Ram": "helper", "Bob": "helper" };
function filter(age: number, roles: { [name: string]: string }) {
const keys = Object.keys(roles);
return personsArr.filter((val) => val.age === age && keys.indexOf(val.name) > -1);
}
// 0: Object { name: "Ram", email: "ram@gmail.com", age: 23 }
// 1: Object { name: "peter", email: "shyam23@gmail.com", age: 23 }
console.log(filter(23, personObj));
// 0: Object { name: "Bob", email: "bob32@gmail.com", age: 41 }
console.log(filter(41, personObj));
不管你是否自己循环,都会涉及到循环。最简单的答案可能是使用Array.filter 下面是一个完整的示例:
const personsArr = [
{ "name": "Ram", "email": "ram@gmail.com", "age": 23 },
{ "name": "peter", "email": "shyam23@gmail.com", "age": 23 },
{ "name": "John", "email": "john@gmail.com", "age": 33 },
{ "name": "Bob", "email": "bob32@gmail.com", "age": 41 }
];
const personObj = { "peter": "helper", "Ram": "helper", "Bob": "helper" };
function filter(age: number, roles: { [name: string]: string }) {
const keys = Object.keys(roles);
return personsArr.filter((val) => val.age === age && keys.indexOf(val.name) > -1);
}
// 0: Object { name: "Ram", email: "ram@gmail.com", age: 23 }
// 1: Object { name: "peter", email: "shyam23@gmail.com", age: 23 }
console.log(filter(23, personObj));
// 0: Object { name: "Bob", email: "bob32@gmail.com", age: 41 }
console.log(filter(41, personObj));
变量personsArr=[
{名称:Ram,电子邮件:ram@gmail.com,年龄:23},
{姓名:peter,电子邮件:shyam23@gmail.com,年龄:23},
{姓名:John,电子邮件:john@gmail.com,年龄:33},
{姓名:Bob,电子邮件:bob32@gmail.com,年龄:41}
];
var personObj={peter:helper,Ram:helper,Bob:helper}
var newPersonsArr=personsArr.filterperson=>person.age{
ifperson.name==键{
检查=正确
}
};
}
控制台日志检查
变量personsArr=[
{名称:Ram,电子邮件:ram@gmail.com,年龄:23},
{姓名:peter,电子邮件:shyam23@gmail.com,年龄:23},
{姓名:John,电子邮件:john@gmail.com,年龄:33},
{姓名:Bob,电子邮件:bob32@gmail.com,年龄:41}
];
var personObj={peter:helper,Ram:helper,Bob:helper}
var newPersonsArr=personsArr.filterperson=>person.age{
ifperson.name==键{
检查=正确
}
};
}
控制台日志检查 你可以试试这个,用过滤器和一些。您可以根据条件进行筛选,然后检查对象上的匹配项。希望这有帮助 const personsArr=[{ 姓名:Ram,, 电邮:ram@gmail.com, 年龄:23 }, { 姓名:彼得, 电邮:shyam23@gmail.com, 年龄:23 }, { 姓名:约翰, 电邮:john@gmail.com, 年龄:33 }, { 姓名:鲍勃, 电邮:bob32@gmail.com, 年龄:41 }]; const personObj={Ram:helper,Bob:helper}; const personObj2={Ram2:helper,Bob2:helper}; const checkArr=age,arr,obj=>arr.filterf=>f.age>age.somed=>obj[d.name]; console.log“应该是true”; console.logcheckArr30,personsArr,personObj; console.log“应为false”;
console.logcheckArr30,personsArr,personObj2 你可以试试这个,用过滤器和一些。您可以根据条件进行筛选,然后检查对象上的匹配项。希望这有帮助 const personsArr=[{ 姓名:Ram,, 电邮:ram@gmail.com, 年龄:23 }, { 姓名:彼得, 电邮:shyam23@gmail.com, 年龄:23 }, { 姓名:约翰, 电邮:john@gmail.com, 年龄:33 }, { 姓名:鲍勃, 电邮:bob32@gmail.com, 年龄:41 }]; const personObj={Ram:helper,Bob:helper}; const personObj2={Ram2:helper,Bob2:helper}; const checkArr=age,arr,obj=>arr.filterf=>f.age>age.somed=>obj[d.name]; console.log“应该是true”; console.logcheckArr30,personsArr,personObj; console.log“应为false”;
console.logcheckArr30,personsArr,personObj2;存储布尔值的预期结果是什么?请同时向我们展示您使用循环方法所做的尝试。您使用“按年龄筛选”是什么意思?存储布尔值的预期结果是什么?另外,请向我们展示您尝试的循环方法。您使用“按年龄筛选”是什么意思?因为您已经在使用Array.filter for age,您可以同时检查名称条件,从而减少循环量。这很有效-在第一次匹配后是否仍有中断循环的方法?当我记录控制台日志时,我得到了许多额外的true循环。由于您已经在使用Array.filter for age,您可以同时检查名称条件,从而减少循环量。这很有效-在第一次匹配后是否仍有中断循环的方法?当我记录控制台日志时,我得到了许多额外的true循环。