有没有办法使用变量创建对象并忽略未定义的变量?

sil*_*513 5 javascript object ecmascript-6

我正在尝试找到一种创建对象的方法,在创建时它会忽略未定义的值.

在下面的示例中,变量some​​Names在创建对象时具有未知内容.

const someNames = {
  catName: 'purry',
  rabbitName: 'floppy',
  turtleName: 'shelly'
};

const { catName, dogName, hamsterName, rabbitName } = someNames;

const animalNames = Object.assign({}, {
  catName,
  dogName,
  hamsterName,
  rabbitName
});

console.log(animalNames);// {catName: 'purry', rabbitName: 'floppy'}
Run Code Online (Sandbox Code Playgroud)

实际记录的内容是:

{
  catName: 'purry',
  dogName: undefined,
  hamsterName: undefined,
  rabbitName: 'floppy'
}
Run Code Online (Sandbox Code Playgroud)

Ber*_*rgi 6

不要使用Object.assign哪些副本所有可拥有的属性,无论它们的值如何,但您自己的自定义函数可以过滤掉undefined属性:

function assignDefined(target, ...sources) {
    for (const source of sources) {
        for (const key of Object.keys(source)) {
            const val = source[key];
            if (val !== undefined) {
                target[key] = val;
            }
        }
    }
    return target;
}

…
const animalNames = assignDefined({}, {
  catName,
  dogName,
  hamsterName,
  rabbitName
});
Run Code Online (Sandbox Code Playgroud)