首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遍历对象数组,查找包含2个值的对象

遍历对象数组,查找包含2个值的对象
EN

Stack Overflow用户
提问于 2019-01-24 23:33:12
回答 5查看 52关注 0票数 1

我目前有一个数组,看起来像这样:

代码语言:javascript
复制
var array = [
      {
        "name": "a",
        "age": 1,
        "siblings": 3
      },
      {
        "name": "b",
        "age": 3,
        "siblings": 5
      },
      {
        "name": "a",
        "age": 1,
        "siblings": 2
      }
]

我想创建一个接受两个值的函数,并返回一个包含匹配这两个值的对象的新数组。

代码语言:javascript
复制
var name = "a";
var age = 1;
someFunction(name, age);

并返回如下所示的内容:

代码语言:javascript
复制
newArray = [
      {
        "name": "a",
        "age": 1,
        "siblings": 3
      },
      {
        "name": "a",
        "age": 1,
        "siblings": 2
      }

]

我尝试过使用filter方法和reduce方法,但没有成功。如果有人能帮助我或为我指明正确的方向,我将不胜感激。

代码语言:javascript
复制
var array = [
      {
        "name": "a",
        "age": 1,
        "siblings": 3
      },
      {
        "name": "b",
        "age": 3,
        "siblings": 5
      },
      {
        "name": "a",
        "age": 1,
        "siblings": 2
      }
]

 var result = array.filter(function(obj) {
           return obj.name === "a" && obj.age === 1;
           });
    return result[0];
 }
console.log(result);

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-01-24 23:40:10

您可以使用包含所需键/值对的数组进行搜索。

使用Array#every检查谓词,然后使用Array#filter

代码语言:javascript
复制
var array = [{ name: "a", age: 1, siblings: 3 }, { name: "b", age: 3, siblings: 5 }, { name: "a", age: 1, siblings: 2 }],
    search = [['name', 'a'], ['age', 1]],
    result = array.filter(object => search.every(([key, value]) => object[key] === value));

console.log(result);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 1
EN

Stack Overflow用户

发布于 2019-01-24 23:40:37

以下是您的工作函数

代码语言:javascript
复制
function someFunction (name, age) {
    return array.filter(val => val.name == name && val.age == age)
}
票数 1
EN

Stack Overflow用户

发布于 2019-01-24 23:41:19

Array#filter回调中,只需将当前元素的name & age与您传入的参数进行比较即可。

代码语言:javascript
复制
var array = [{"name":"a","age":1,"siblings":3},{"name":"b","age":3,"siblings":5},{"name":"a","age":1,"siblings":2}]
var name = "a";
var age = 1;
function someFunction(name, age){
 return array.filter((obj) => obj.name === name && obj.age === age)
}
console.log(someFunction(name, age));

您也可以使用Array#reduce。只需将匹配的对象添加到累加器数组中并返回它。

代码语言:javascript
复制
var array = [{"name":"a","age":1,"siblings":3},{"name":"b","age":3,"siblings":5},{"name":"a","age":1,"siblings":2}]
var name = "a";
var age = 1;
function someFunction(name, age){
 return array.reduce((acc, obj) => {
   if(obj.name === name && obj.age === age) 
     acc.push(obj);
   return acc;
 }, []);
}
console.log(someFunction(name, age));

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54350199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档