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。谁能帮我解决问题吗?
您可以尝试过滤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)
| 归档时间: |
|
| 查看次数: |
8653 次 |
| 最近记录: |