如何获取没有未定义值的对象?

时间:2017-11-08 20:37:47

标签: javascript

我有一个对象

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]);

4 个答案:

答案 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值,您可以自由地确定这种情况。

&#13;
&#13;
false
&#13;
&#13;
&#13;

答案 2 :(得分:1)

这将为你想要的一个深层对象做你想要的。它返回false和0值,并删除undefined和null。

&#13;
&#13;
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;
&#13;
&#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值。