javascript如何将函数参数转换为对象

javascript如何将函数参数转换为对象,javascript,Javascript,我有下面的函数,希望将参数转换为对象,其中参数与键和值同名 functionA(name, callback, param1, param2, ....paramN) { var params = {'param1': param1,.....}; $.ajax(... data: params.....); } 我的猜测基于其措辞(如果提供更多详细信息,将进行编辑): 如果您所在的环境支持ES6,或者您可以通过或其他传输工具传输代码,您可以这样编写: function function

我有下面的函数,希望将参数转换为对象,其中参数与键和值同名

functionA(name, callback, param1, param2, ....paramN)
{
var params = {'param1': param1,.....};
   $.ajax(... data: params.....);
}

我的猜测基于其措辞(如果提供更多详细信息,将进行编辑):

如果您所在的环境支持ES6,或者您可以通过或其他传输工具传输代码,您可以这样编写:

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]
}
让fnStr=arguments.callee.toString(),
argNames=fnStr.slice(fnStr.indexOf(“(”)+1,fnStr.indexOf(“))).match(/([^\s,]+)/g),//argNames是参数名称的列表
obj={};
for(设i=0;i
如果您支持ES6,则转到并返回对象:

函数A(名称,回调,…参数)
{
常量结果=参数减少((对象,项目,i)=>{
obj[“参数”+(i+1)]=项目;
返回obj;
}, {})
控制台日志(结果);
}
A(“名称”、“回调”、“参数1”、“2”、“任意”、“参数4”);

A(“名称”、“回调”、“参数1”)使用您的示例,您的意思是希望函数返回如下内容:
{name:name,callback:callback,param1:param1,等等。
?这个问题可能是相关的:两种情况下的参数都是数组。@pritesh我在你的评论之前编辑过,因为我意识到他们要求的参数是对象而不是数组。我的错,它是在之前创建了一个索引对象,例如,
{0:a',1:b}
。现在它创建了我认为需要的:
{a:'a',b:'b'}
我假设OP想要
{param1:a,param2:b}
,而不是字面上的参数值作为它的键。如果我传入
[“foo”,“bar”,“baz”]
,我假设目的是生成
{param1:“foo”,param2:“bar”,param3:“baz”
,而不是
{foo:“foo”,bar:“bar”,baz:“baz}
,这是一个完全冗余的结构。