如何获取值不等于null的对象的键和值?

Bir*_*tam 6 javascript object reactjs

我有一个看起来像这样的对象:

let data = {
      toDate: this.state.toDate,
      fromDate: this.state.fromDate,
      filteredEntityText: null,
      options: "negative",
      searchTerm: null
    };
Run Code Online (Sandbox Code Playgroud)

从上面的对象中,我想生成一个新对象,该对象仅具有值不为空的键值对。

预期结果应如下所示:

let newData = {
    toDate: this.state.toDate,
    fromDate: this.state.fromDate,
    options: "negative"
};
Run Code Online (Sandbox Code Playgroud)

这里我使用了对象的静态示例data,空值稍后可能会有所不同。基本上我想要一个具有键值对的新对象,其值不是null。谁能帮我解决问题吗?

Den*_*ash 6

您可以尝试过滤Object.entries()

const data = {
  toDate: {},
  fromDate: {},
  filteredEntityText: null,
  options: 'negative',
  searchTerm: null
};

const newData = {};
Object.entries(data)
  .filter(([, value]) => value !== null)
  .forEach(([key, value]) => (newData[key] = value));

console.log(newData);
Run Code Online (Sandbox Code Playgroud)


ATU*_*RMA -2

这一切也将帮助您删除嵌套的空项目。使用一些 ES6 / ES2015:下面的一些示例将直接修改数据对象,或者如果您想创建删除空值的重复对象,您可以调用下面给出的函数,它将返回新对象。

如果您不喜欢创建额外的函数并删除“内联”项目。

Object.keys(data).forEach(k => (!data[k] && data[k] !== undefined) && delete data[k]);
Run Code Online (Sandbox Code Playgroud)

同样,写成函数。

const removeEmpty = (data) => {
  Object.keys(data).forEach((k) => (!data[k] && data[k] !== undefined) && delete 
       data[k]);
  return data;
};
Run Code Online (Sandbox Code Playgroud)

此函数还使用递归从嵌套对象中删除项目:

const removeEmpty = (data) => {
  Object.keys(data).forEach(k =>
    (data[k] && typeof data[k] === 'object') && removeEmpty(data[k]) ||
    (!data[k] && data[k] !== undefined) && delete data[k]
  );
  return data;
};
Run Code Online (Sandbox Code Playgroud)

与之前的函数相同,但使用 ES7 / 2016 Object.entries:

const removeEmpty = data => {
  Object.keys(data).forEach(
    k => !data[k] && data[k] !== undefined && delete data[k]
  );
  return data;
};
Run Code Online (Sandbox Code Playgroud)

与第三个示例相同,但采用普通 ES5:

function removeEmpty(data) {
  Object.keys(data).forEach(function(key) {
    (data[key] && typeof data[key] === 'object') && removeEmpty(data[key]) ||
    (data[key] === '' || data[key] === null) && delete data[key]
  });
  return data;
};
Run Code Online (Sandbox Code Playgroud)