编写一个函数,该函数接受一个对象数组以及一个具有属性和值的对象。该函数将返回 prop/vals 匹配的对象数组。
我知道以下内容,但在理解问题本身时遇到很多困难。如有任何帮助,我们将不胜感激!
返回示例如下:
thinglist = [
{age: 'four', type: 'Cat', name: 'mammal'},
{age: 'six', type: 'Dog', name: 'mammal'},
{age: 'seven', type: 'Dog', name: 'mammal'},
{age: 'two', type: 'Lizard', name: 'reptile'}
]
withVals( thingList , {type: 'Dog', name: 'mammal'} )
=> [
{age: 'seven', type: 'Dog', name: 'mammal'},
{age: 'six', type: 'Dog', name: 'mammal'}
]
我知道如何迭代数组并提取值,但我也不知道如何将对象传递给函数。然后迭代它以查看这些值是否匹配。
这就是我所看到的开始方式:
function withPropValues(arr, obj) {
var newArray = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] === obj) {
newArray.push(arr[i])
}
}
return newArray;
}
最佳答案
您需要循环object
的所有属性并查看它们是否与 array
中每个项目的同名属性匹配。您可以通过 Object.keys(object)
获取所有属性名称。 ,然后就可以使用括号表示法访问值,例如 object[key] === array[i][key]
.
一般来说,你想要做的事情可以用 filter
非常巧妙地完成。 ,您可以将所有属性与 every
相匹配。超过Object.keys
:
function withVals(array, object) {
var keys = Object.keys(object);
return array.filter(function(item) {
return keys.every(function(k) { return item[k] === object[k]; });
});
}
filter
接受一个回调,检查数组中的项目并返回true
是否应保留该项目或false
如果不应该保留。它返回一个新的过滤数组。every
接受一个回调来检查数组的一项并返回true
或false
。如果数组中的每一项都导致函数返回true
,然后every
调用还返回true
,但是单个false
值导致它返回false
.Object.keys(object).every
正在测试object
的每个键具有与array
某些项目中相应属性值相匹配的值。如果是这样,请将该项目包含在数组的过滤版本中。
关于javascript - 编写一个函数,该函数接受一个对象数组以及一个具有属性和值的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39282327/