Javascript 创建对象-如果值设置为“包含关键点”

Javascript 创建对象-如果值设置为“包含关键点”,javascript,object,javascript-objects,Javascript,Object,Javascript Objects,我通常希望构建这样一个对象: const test = { key1: value1, key2: value2, key3: value3, key4: value4, } 但是,如果value3未定义 目前我正在做一些类似的事情: const test = { key1: value1, key2: value2, key4: value4, } if (value3) test.key3 = value3; 但是在某些情况下,有相当多的值可能是未定义的,因

我通常希望构建这样一个对象:

const test = {
  key1: value1,
  key2: value2,
  key3: value3,
  key4: value4,
}
但是,如果
value3
未定义

目前我正在做一些类似的事情:

const test = {
  key1: value1,
  key2: value2,
  key4: value4,
}

if (value3) test.key3 = value3;

但是在某些情况下,有相当多的值可能是
未定义的
,因此我想知道如果值是
未定义的
,是否有一种方法可以不返回键,以避免一大堆条件?

您可以将
Object.keys
数组一起使用。减少
以仅收集未定义的值未定义:

const测试={
键1:‘值1’,
键2:‘值2’,
关键4:未定义,
}
const onlyPopulated=Object.keys(test).reduce((p,key)=>{
if(测试类型[键]!==‘未定义’){
p[键]=测试[键];
}
返回p;
}, {});

log(onlyPopulated)
如果您能够使用jQuery,那么您可以使用extend,如下所示

基本上,extend所做的是将提供的第二个对象合并到第一个对象中。但是,它不会合并null或未定义的属性。所以我认为它会很好地匹配您的用例,并且非常干净


jQuery.extend演示
var object1={
};
var测试={
关键1:1,
关键2:2,
键3:未定义,
关键4:4,
}
//将测试合并到object1中
$.extend(object1,test);

//假设JSON.stringify在IE中不可用,实际上我可能会使用与其他答案中已经提到的类似的技术。然而,只是为了好玩

如果对象中的所有值都可以安全地转换为JSON,那么实现所需结果的简明方法是使用
stringify
parse

var数据={
键1:'字符串',
键2:34,
键3:未定义,
键4:[{key:'嵌套'}],
键5:空
};
data=JSON.parse(JSON.stringify(data));

控制台日志(数据)这是罚单。我以前没有使用过
reduce()
。好东西。