#javascript
#javascript
Вопрос:
У меня есть объект 1, подобный этому
const object1 = {
Sheet1: [
{ A: '', B: '', C: '', D: '', E: '' },
{
A: 'Cash Report - Processed',
B: 'Store: 54101 Date: 1/30/2020',
D: '',
E: ''
},
{ A: '', B: '', C: '', D: 'Adj: 00', E: 'Adj: 01' },
],
Sheet2: [ { D: 'a' }, { G: 's' }, { G: 'b' } ]
};
Я хочу удалить пустые данные, но у меня проблема, когда я зацикливаю объект 1, я не могу получить ключ к своему коду
Object.keys(object1).forEach(function(key) {
console.log(key, object1[key]);
});
Я хочу, чтобы данные были такими
{
Sheet1: [
{
A: 'Cash Report - Processed',
B: 'Store: 54101 Date: 1/30/2020',
},
{ D: 'Adj: 00', E: 'Adj: 01' },
],
Sheet2: [ { D: 'a' }, { G: 's' }, { G: 'b' } ]
};
Ответ №1:
Вы можете выполнить это с помощью Object.entries
и Array.reduce
.
const input = {
Sheet1: [
{ A: '', B: '', C: '', D: '', E: '' },
{
A: 'Cash Report - Processed',
B: 'Store: 54101 Date: 1/30/2020',
D: '',
E: ''
},
{ A: '', B: '', C: '', D: 'Adj: 00', E: 'Adj: 01' },
],
Sheet2: [ { D: 'a' }, { G: 's' }, { G: 'b' } ]
};
const output = Object.entries(input).reduce((acc, cur) => {
acc[cur[0]] = cur[1].reduce((curAcc, curVal) => {
const notNull = Object.entries(curVal).filter(([ key, val ]) => val);
if (notNull.length > 0) {
curAcc.push(Object.fromEntries(notNull));
}
return curAcc;
}, []);
return acc;
}, {});
console.log(output);
Ответ №2:
Используйте это:
for(const key in object1){
const element = object1[key];
object1[key] = element.map(x => {
for(const prop in x){
if(!x[prop]){
delete x[prop];
}
}
return Object.keys(x).length ? x : null
}).filter(x => !!x);
};
Ответ №3:
Используется Object.entries
для преобразования объекта в массив пар ключ-значение, манипулирования этими парами, удаления пар с пустым значением, затем преобразования обратно в объект с помощью Object.fromEntries
const object1 = {
Sheet1: [
{ A: "", B: "", C: "", D: "", E: "" },
{
A: "Cash Report - Processed",
B: "Store: 54101 Date: 1/30/2020",
D: "",
E: "",
},
{ A: "", B: "", C: "", D: "Adj: 00", E: "Adj: 01" },
],
Sheet2: [{ D: "a" }, { G: "s" }, { G: "b" }],
}
const notEmptyObject = (obj) => Object.keys(obj).length > 0
const removeEmptyValues = (obj) =>
Object.fromEntries(Object.entries(obj).filter(([_, value]) => Boolean(value)))
const res = Object.fromEntries(
Object.entries(object1).map(([sheet, data]) => [
sheet,
data
.map(removeEmptyValues)
.filter(notEmptyObject),
])
)
console.log(res)
Комментарии:
1. Я не могу думать о преобразовании объекта в массив.. Я просто фокусирую объект, поэтому не могу найти решение, так много, что мне не нравится