具有条件值的对象

时间:2017-03-10 20:39:20

标签: javascript object ecmascript-6

我试图根据条件将一些参数传递给函数。

参数是对象。

所以基本上我试图用布尔语来做这件事。如果它是真的添加参数,如果它不添加任何内容。

theFunction(arg1, addArg2 && arg2, addArg3 && arg3);

这不起作用。 什么是实现这一目标的方法? 也许我应该首先建立清单,但我不知道该怎么做。

编辑---

我正在使用一个可以根据需要获取尽可能多的参数的库 论点如下:

const style1 = props => ({
    borderRadius: "0%",
});

const style2 = props => ({
    width: "10px",
});

theFunction(style1, style2);

我想根据值将这些传递给函数。对我来说,似乎用布尔值来做这个是一个很好的解决方案。 所以有时我会打电话给

theFunction(style1);

有时候

theFunction(style1, style2);

我愿意接受其他建议。

3 个答案:

答案 0 :(得分:0)

您的库函数可能无法理解传递false而不是对象作为参数的含义。不幸的是,没有什么'您可以传递给一个函数,以防止它出现在该函数的参数列表中。

但是,您可以根据需要构建可迭代的参数列表,并使用spread operator将其传递给库函数。

示例,假设f是您的库函数:



function f(...args) {
  console.log('Got', args);
}

var addArg2 = false, addArg3 = true;
var arg1 = 1, arg2 = 2, arg3 = 3;

// Not working:
f(arg1, addArg2 && arg2, addArg3 && arg3);

// Working:
var args = [arg1];
if (addArg2) args.push(arg2);
if (addArg3) args.push(arg3);
f(...args);




答案 1 :(得分:0)

我想我明白你要做的事情。

// You can use the spread operator in the declaration to make 'arguments' an array
function theFunction(...args) {
    let obj = {};
    args.forEach( (item) => {
        // Using Object.entries() loop for the sake of legibility
        for( let [key, value] of Object.entries(item)) {
            // For every object you pass in, assign to object to return
            obj[key] = value;
        }
    }
    return obj;
}

当然,如果您只是将所有这些对象合并在一起,则可以使用Object.assign

function theFunction(...args) {
    let obj = {};
    args.forEach( (item) => {
        Object.assign(obj, item);
    }
    return obj;
}

More info on Object.assign() at MDN

祝你好运!希望这会有所帮助。

答案 2 :(得分:-1)

U可以将默认值设置为null或者像在

之类的函数中一样
var a = arg || null;