Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
Javascript 如何检查对象键是否在按数组键筛选的数组中?_Javascript_Typescript - Fatal编程技术网

Javascript 如何检查对象键是否在按数组键筛选的数组中?

Javascript 如何检查对象键是否在按数组键筛选的数组中?,javascript,typescript,Javascript,Typescript,我正在使用一款Angular 2 Ionic应用程序- 是否有一种方法可以在personsArr中按年龄筛选所有人员,然后查找personObj中的任何键是否与personArr名称匹配并返回布尔值 我有一个示例数组,如: personsArr = [{ "name": "Ram", "email": "ram@gmail.com", "age": 23 }, { "name": "peter", "

我正在使用一款Angular 2 Ionic应用程序-

是否有一种方法可以在personsArr中按年龄筛选所有人员,然后查找personObj中的任何键是否与personArr名称匹配并返回布尔值

我有一个示例数组,如:

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循环。