我目前有一个数组,看起来像这样:
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;
someFunction(name, age);并返回如下所示的内容:
newArray = [
{
"name": "a",
"age": 1,
"siblings": 3
},
{
"name": "a",
"age": 1,
"siblings": 2
}
]我尝试过使用filter方法和reduce方法,但没有成功。如果有人能帮助我或为我指明正确的方向,我将不胜感激。
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);
发布于 2019-01-24 23:40:10
您可以使用包含所需键/值对的数组进行搜索。
使用Array#every检查谓词,然后使用Array#filter。
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);.as-console-wrapper { max-height: 100% !important; top: 0; }
发布于 2019-01-24 23:40:37
以下是您的工作函数
function someFunction (name, age) {
return array.filter(val => val.name == name && val.age == age)
}发布于 2019-01-24 23:41:19
在Array#filter回调中,只需将当前元素的name & age与您传入的参数进行比较即可。
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。只需将匹配的对象添加到累加器数组中并返回它。
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));
https://stackoverflow.com/questions/54350199
复制相似问题