我有一个对象
let o = {
a: 1,
b: undefined,
c: 2345,
d: null
}
如何获取没有null和未定义值的对象?
let o = {
a: 1,
c: 2345
}
这是最佳做法吗?
Object.keys(o).forEach((key) => (o[key] == null || o[key] == undefined)
&& delete o[key]);
答案 0 :(得分:2)
尝试以下方法:
let a = {
a: 1,
b: undefined,
c: 2345,
d: null
};
for(p in a) {
if(a[p] === undefined || a[p] === null) {
delete a[p];
}
}
console.log(a); // {a: 1, c: 2345}
UPD。非突变版本:
let result = {};
for(p in a) {
if(a[p] === undefined || a[p] === null) {
continue;
}
result[p] = a[p];
}
console.log(result); // {a: 1, c: 2345}
答案 1 :(得分:2)
正如我在评论中所写,我建议避免变异(不要覆盖父变量)。考虑以下方法:
注意:dfFULL <- cbind(dfX1, dfX2, dfX3...)
会过滤掉每个 falsy 值。万一,如果您希望您的密钥有例如空字符串(v) => o[v]
,''
或布尔0
值,您可以自由地确定这种情况。
false
&#13;
答案 2 :(得分:1)
这将为你想要的一个深层对象做你想要的。它返回false和0值,并删除undefined和null。
const o = {
a: 1,
b: undefined,
c: 2345,
d: null,
e: 0,
f: false,
g: {},
h: []
};
const r = Object.keys(o)
.filter((v) => {
return o[v] === false || o[v] === 0 || o[v];
})
.reduce((s, a) => ({
...s,
[a]: o[a],
}),
{});
console.log(r);
&#13;
答案 3 :(得分:0)
可以做一些非常简单的事情,例如:
IList dogs = new List<Dog>() { new Dog { Id = 1, Name = "Alsatian" }, new Dog { Id = 2, Name = "Westie" } };
var dogHistoryType = typeof(DogHistory);
var listType = typeof(List<>).MakeGenericType(new[] { dogHistoryType });
var typedHistories = (IList)Activator.CreateInstance(listType);
mapper.Map(dogs, typedHistories);
foreach (var historyItem in typedHistories)
{
this.Add(historyItem);
}
这将删除所有null和undefined值。