将JavaScript对象修剪为具有匹配值的指定属性



我正在尝试验证对象是否具有特定的属性集,以及它们的值是否属于特定类型。我希望能够将对象与这样的模板进行比较

name: "string",
age: "number",
registered: "boolean"

并返回一个只包含与模板匹配的字段的对象。

var object = {
    name: "John McClane",
    age: 45,
    location: "Nakatomi Towers",
    registered: "yes"
}
var document = match(object, template);
console.log(document); 
/* Should return 
{
    name: "John McClane",
    age: 45
}
*/

在编写这样的函数时,JavaScript的最佳实践是什么?我不太熟悉内置的方法和迭代,所以我不想走错这条路。

您可以使用Object.keys生成template键的数组,Array.prototype.reduce迭代这些键并创建单个结果对象,Object.prototype.hasOwnProperty测试object是否具有该键,typeof测试object[key]的类型。

function match(obj, tpl) {
    return Object.keys(tpl).reduce(function(collection, key) {
        if (obj.hasOwnProperty(key) && typeof obj[key] === tpl[key]) {
            collection[key] = obj[key];
        }
        return collection;
    }, {});
}

最新更新