Javascript 将对象传递给接受参数列表的函数
我有一个函数定义如下Javascript 将对象传递给接受参数列表的函数,javascript,coffeescript,Javascript,Coffeescript,我有一个函数定义如下 postEvent = (data) -> throw new Error("category is required for structured events") if not category throw new Error("action is required for structured events") if not action $window.submit 'type1', data.category, data.action, data.l
postEvent = (data) ->
throw new Error("category is required for structured events") if not category
throw new Error("action is required for structured events") if not action
$window.submit 'type1', data.category, data.action, data.label, data.property, data.value
类别和操作是必需的,但其余的不是。如果数据
对象不包含给定值,则不应传递该值
我可以使用大量的if语句,但我怀疑还有更好的方法。
因此,我正在寻找一种方法来展开对象值并传递给另一个函数
例如
data = {category: 'cat1', action: 'action1', value: 1.2}
postEvent(data)
这将导致以下结果
$window.submit 'type1', 'cat1', 'action1', 1.2
您可以使用:
然后可以使用call
应用所有参数:
$window.sumbit.call $window, category, action, value
如果需要验证,我建议采用不同的方法:
DATA_ORDERING = ['category', 'action', 'value']
postEvent = (data) ->
let stuff = Object.keys data
.sort (a, b) -> DATA_ORDERING.indexOf(a) - DATA_ORDERING.indexOf(b)
.map (k) -> data[k]
let valid = stuff.every (item) -> item? #make sure non-null
if valid then $window.submit.apply $window, stuff
params = [data.category, data.action]
OPTIONAL = ['label', 'property', 'value']
for prop in OPTIONAL
params.push(data[prop]) if data.hasOwnProperty(prop)
params = [data.category, data.action]
OPTIONAL = ['label', 'property', 'value']
for prop in OPTIONAL
params.push(data[prop]) if data.hasOwnProperty(prop)
apply
$window.submit.apply($window, params)