我使用 Angular8,想要从数组中删除空对象,并获取其长度
Array: [
{data01: "abc", data02: "cde", data03: "fgh", data04: "", data05: ""},
{data01: "abc", data02: "cde", data03: "", data04: "", data05: ""},
{data01: "abc", data02: "cde", data03: "fgh", data04: "ijk", data05: "lmn"},
{data01: "abc", data02: "", data03: "", data04: "", data05: ""},
]
那么我希望它像
Array: [
{data01: "abc", data02: "cde", data03: "fgh"},
{data01: "abc", data02: "cde"},
{data01: "abc", data02: "cde", data03: "fgh", data04: "ijk", data05: "lmn"},
{data01: "abc"},
]
无论如何都要这么做吗?
我尝试将这些元素插入一个新数组中,例如
_Array: ["abc","cde", "fgh", "", "", ....]
将其分块为5,然后进行过滤( bool ),它可以工作,但性能有点慢,还有其他方法可以提高性能吗?
最佳答案
可以使用JS中Array对象方法的map()和filter()来解决这个问题。
let array = [
{data01: "abc", data02: "cde", data03: "fgh", data04: "", data05: ""},
{data01: "abc", data02: "cde", data03: "", data04: "", data05: ""},
{data01: "abc", data02: "cde", data03: "fgh", data04: "ijk", data05: "lmn"},
{data01: "abc", data02: "", data03: "", data04: "", data05: ""},
]; // array provided
array = array.map(object => {
let entries = Object.entries(object); //for each element in the array get the entries, [key, value] pair
entries = entries.filter(([key, value]) => value !== ""); // remove the elements which has "" values
return Object.fromEntries(entries);
});
console.log(array.length);
// shorter version
array = array.map(object => Object.fromEntries(Object.entries(object).filter(([key, value]) => value !== "")));
console.log(array.length);
如果输入数组有一个包含所有条目“”(空字符串)的对象,则结果数组可能包含一个空对象。例如:{data01:“”,data02:“”,data03:“”,data04:“”,data05:“”}。在这种情况下,我们需要另一个filter()来从结果数组中删除空对象。
let array = [
{data01: "abc", data02: "cde", data03: "fgh", data04: "", data05: ""},
{data01: "abc", data02: "cde", data03: "", data04: "", data05: ""},
{data01: "abc", data02: "cde", data03: "fgh", data04: "ijk", data05: "lmn"},
{data01: "abc", data02: "", data03: "", data04: "", data05: ""},
]; // array provided
array = array.map(object => {
let entries = Object.entries(object);
entries = entries.filter(([key, value]) => value !== "");
return Object.fromEntries(entries);
});
// remove the empty object if present
array = array.filter(object => Object.entries(object).length !== 0);
console.log(array.length);
// shorter version
array = array.map(object => Object.fromEntries(Object.entries(object).filter(([key, value]) => value !== ""))).filter(object => Object.entries(object).length !== 0);
// the filter() at the end removes the empty object
console.log(array.length);
关于arrays - Angular 8 : Remove empty Object from array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59558388/