繁体   English   中英

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

[英]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希望键为param1param2等:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM