javascript - 编写一个函数,该函数接受一个对象数组以及一个具有属性和值的对象

标签 javascript jquery

编写一个函数,该函数接受一个对象数组以及一个具有属性和值的对象。该函数将返回 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接受一个回调来检查数组的一项并返回 truefalse 。如果数组中的每一项都导致函数返回 true ,然后 every调用还返回 true ,但是单个false值导致它返回 false .

  • Object.keys(object).every正在测试object每个键具有与 array 某些项目中相应属性值相匹配的值。如果是这样,请将该项目包含在数组的过滤版本中。

关于javascript - 编写一个函数,该函数接受一个对象数组以及一个具有属性和值的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39282327/

相关文章:

javascript通过添加单个字符来操作字符串

javascript - 如何将 javascript 用于 html?

javascript - 如何在 Typescript 的回调函数中访问 'this'?

php - Javascript 变量 - 未定义

javascript - 等待 form.submit()/POST 完成

javascript - 限制 JQuery/ajax 中的列表选择

javascript - 当我们需要修改上下文类时实现策略模式

javascript - 广告 block 加上阻止 jQuery 脚本?

javascript - 如何在数字 Javascript 下限制数组中的斐波那契数列

javascript - 将 html 表格导出为 PDF 并保留表格外观