[英]javascript how to convert function parameters to object
我下面有函數,想將參數轉換為參數與鍵和值同名的對象
functionA(name, callback, param1, param2, ....paramN)
{
var params = {'param1': param1,.....};
$.ajax(... data: params.....);
}
我的猜測基於此措辭(如果提供更多詳細信息,將進行編輯):
如果您在支持ES6的環境中,或者可以通過babel或其他一些編譯器來編譯代碼,則可以這樣編寫:
function functionA(name, callback, ...params) {
const paramsObj = params.reduce((params, param) => {
return Object.assign(params, {[param]: param});
}, {});
$.ajax({data: paramsObj});
}
functionA(null, null, 'a', 'b'); // paramsObj will be: {a: 'a', b: 'b'}
編輯:如果相反,OP希望鍵為param1
, param2
等:
function functionA(name, callback, ...params) {
const paramsObj = params.reduce((params, param, i) => {
return Object.assign(params, {[`param${i + 1}`]: param});
}, {});
$.ajax({data: paramsObj});
}
functionA(null, null, 'a', 'b'); // paramsObj will be: {param1: 'a', param2: 'b'}
一種方法是
function a(p1, p2, p3) {
a = {
[p1]: p1,
[p2]: p2,
[p3]: p3,
}
console.log(a, 'a')
// Gives you
// {a: "a", b: "b", c: "c"}
}
a('a', 'b', 'c')
結合Scott Rudiger的解決方案,您可以執行以下操作:
function functionA(name, callback, ...params) {
var p = params.reduce((obj, item) => {
return obj[item] = item
}, {})
console.log(p)
// Gives you
// {dd: "dd", ee: "ee", ff: "ff", gg: "gg"}
}
functionA('pp', 'cc', 'dd', 'ee', 'ff', 'gg')
如果我理解正確,這就是您所需要的。
let fnStr = arguments.callee.toString(),
argNames = fnStr.slice(fnStr.indexOf('(') + 1, fnStr.indexOf(')')).match(/([^\s,]+)/g), //argNames is a list of parameter names
obj = {};
for(let i= 0; i < arguments.length ; i ++) {
obj[argNames[i]] = arguments[i]
}
如果支持ES6,請使用rest參數語法和Array.reduce()返回對象:
function A(name, callback, ...params) { const result = params.reduce((obj, item,i) => { obj["param"+(i+1)] = item; return obj; }, {}) console.log(result); } A("name","callback","param1",2,"whatever","param4"); A("name","callback","param1");
舊的方式
function A(name, callback, param1) { var params = {}; var n = 2; while( n < Object.keys(arguments).length ){ params["param"+(n-1)] = arguments[n]; n++; } console.log(params); } A("name","callback","param1",2,"whatever","param4"); A("name","callback","param1");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.