我正在尝试验证对象是否具有特定的属性集,以及它们的值是否属于特定类型。我希望能够将对象与这样的模板进行比较
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;
}, {});
}