我有一个方法,它将一个对象作为参数,并且需要所有预期的属性,否则我想抛出一个错误。这是做这件事的最佳做法。可以使用Underscore _.map
或类似的东西轻松完成吗?
按需要"我的意思是null
和undefined
。
答案 0 :(得分:1)
您可以使用_.intersection
和Object.keys
:
function yourFunc(args) {
if(_.intersection(["name", "secondName", "age"], Object.keys(args)).length != 3) {
throw Error("Check your arguments: something is missing!");
}
}
请注意,如果参数未从原型中即时显示,则此类检查将起作用。 From Mozilla Development network:
Object.keys()方法返回给定对象自己的数组 可枚举的属性,与a提供的顺序相同 for ... in循环(不同之处在于for-in循环枚举 原型链中的属性也是如此。
答案 1 :(得分:1)
只需使用标准的JavaScript array .some()
方法,就可以在没有库的情况下执行此操作:
function yourFunction(params) {
if (params == null || typeof params != "object") {
throw "Missing parameters - 'params' must be an object";
} else if (["rp1", "rp2", "etc"].some(function(p) { return !(p in params); })) {
throw "Missing parameter";
}
// if we got this far the parameters were all supplied
};
...数组中的值("rp1"
等)是所需参数的名称。
如果您想支持IE9之前的版本,那么您可以使用任何Underscore的等效方法。
答案 2 :(得分:0)
您可以使用Object.keys(your_object)
获取所有媒体资源。这将生成一个对象键数组。
答案 3 :(得分:0)
var requiredKeys = [....];
function isCorrectObject(obj, testForTruthy) {
return _(requiredKeys).every(function(key) {
return obj[key] || (!testForTruthy && _(obj).has(key));
});
}