如果值未定义,如何不将字段包含在对象中

时间:2018-08-22 05:28:22

标签: javascript

我具有以下功能

const exampleFunction = (var1, var2, var3) => {
    return const targetObject = {
        var1,
        var2,
        var3,
    },
};

var2和var3是可选变量。

如果所有3个变量都发送到此函数,那么我需要返回具有3个字段的对象。

如果未定义var2,则只需要返回具有2个字段的对象。 如果未定义var3,则只需返回具有2个字段的对象。

如果未定义var2和var3,则只需要返回具有1个字段的对象。

4 个答案:

答案 0 :(得分:1)

尝试一下:

const exampleFunction = (var1, var2, var3) => {
    const targetObject = {};
    if (var1) targetObject.var1 = var1;
    if (var2) targetObject.var2 = var2;
    if (var3) targetObject.var3 = var3;

    return targetObject;
};

答案 1 :(得分:1)

JSON.parseJSON.stringify一起使用,因为JSON.stringify将在转换过程中跳过undefinedFunctionSymbol。如果这些类型在数组中,它们将由null自动检查到该数组中的JSON.stringify

const exampleFunction = (var1, var2, var3) => JSON.parse(JSON.stringify({
  var1,
  var2,
  var3
}))

const outputs = exampleFunction(undefined, 2, undefined)
console.log(outputs)

输出:{ var2: 2 }

答案 2 :(得分:0)

我建议您先构建对象,然后摆脱未定义的值

const targetObj = {var1, var2, var3}
Object.keys(targetObj).forEach((key) => (targetObj[key] == null) && delete targetObj[key]);

如果可以确保var1,2,3是基本变量,则使用JSON字符串化和解析看起来不错。否则,它们将被转换为字符串(例如Date对象)。

答案 3 :(得分:0)

如果使用传统的函数语句不带来麻烦,您可以尝试

function anotherExampleFunction(var1, var2, var3) {
    return Object.assign({}, Array.from(arguments).filter(argument => argument !== undefined));
}

const result1 = anotherExampleFunction(1, 2, 3);
const result2 = anotherExampleFunction(1, 2, undefined);
const result3 = anotherExampleFunction(1, undefined, 3);
const result4 = anotherExampleFunction(1, undefined, undefined);

console.log(result1, result2, result3, result4)

输出

{ '0': 1, '1': 2, '2': 3 } { '0': 1, '1': 2 } { '0': 1, '1': 3 } { '0': 1 }