javascript - 有没有办法使用变量创建对象并忽略 undefined variable ?

标签 javascript object ecmascript-6

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

在下面的示例中,变量 someNames 在创建对象时具有未知内容。

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'}

实际记录的是这样的:

{
  catName: 'purry',
  dogName: undefined,
  hamsterName: undefined,
  rabbitName: 'floppy'
}

最佳答案

不要使用 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
});

关于javascript - 有没有办法使用变量创建对象并忽略 undefined variable ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39513815/

相关文章:

javascript - 接受除 5 个连续零以外的所有数字 : Javascript

javascript - 似乎无法定位#document 选择器

javascript - jQuery:鼠标悬停在背景 div "through"上是前景工具提示吗?

python - 在Python中从另一个类创建一个类对象

javascript - 专用文件中的 meteor 集合

javascript - 基于参数调用其他方法的通用 JavaScript 方法

javascript - 如何按照包含每个对象中存在的属性的唯一值的另一个数组的顺序对对象数组进行排序?

javascript - TypeError : this. Canvas 未定义(在声明的对象中)

javascript - 即使我在构造函数中抛出错误,也不会触发 componentDidCatch

javascript - 当调用对象已获取 "this"时,如何从静态方法中引用包含类?