在Javascript的函数中是否可以只破坏一次大对象?
Is it possible to destruct a large object only once in Javascript's function?
我是用一个函数来析构一组数据,那么这个数据基本上处理完再返回。
这里有一个POC/sample来说明一下:
function getDocsData(startWeek) {
// first time to destruct the data
let {
mon,
tue,
wed,
} = startWeek;
mon = mon ? mon.total : 0;
tue = tue ? tue.total : 0;
wed = wed ? wed.total : 0;
// second time repeats the data so that I can have my treated data returned
return {
mon,
tue,
wed,
}
}
如果你有几个变量要处理,这很好,但在我的例子中,我必须处理超过 30 个对象。
注意:我知道我可以改用这个:
return {
mon: startWeek.mon ? startWeek.mon.total : 0;
...
}
这些解决方案是它能得到的最好的解决方案,或者有更好的方法来避免重复对象 { mon, tue, wed }
或到处写 startWeek.
?
我使用 Object.fromEntries
将对象属性数组映射到新对象,根本不需要列出日期:
const getDocsData = startWeek => Object.fromEntries(
Object.entries(startWeek)
.map(([key, val]) => [key, value ? value.total : 0])
);
如果 startWeek
可能具有其他不需要的属性,请遍历所需属性的数组:
const props = ['mon', 'tue', 'wed'];
const getDocsData = startWeek => Object.fromEntries(
props.map(key =>
[startWeek[key] ? startWeek[key].total : 0]
)
);
一个不那么剧烈的调整,可能是对您的原始代码的轻微改进,将 return 新值内嵌在 returned 对象中,无需重新分配:
function getDocsData(startWeek) {
const {
mon,
tue,
wed,
} = startWeek;
return {
mon: mon ? mon.total : 0,
tue: tue ? tue.total : 0,
wed: tue ? wed.total : 0,
}
}
如果值为假,则为 null 或未定义,您还可以使用可选链接而不是条件运算符:
return {
mon: mon?.total ?? 0,
tue: tue?.total ?? 0,
wed: wed?.total ?? 0,
}
我是用一个函数来析构一组数据,那么这个数据基本上处理完再返回。
这里有一个POC/sample来说明一下:
function getDocsData(startWeek) {
// first time to destruct the data
let {
mon,
tue,
wed,
} = startWeek;
mon = mon ? mon.total : 0;
tue = tue ? tue.total : 0;
wed = wed ? wed.total : 0;
// second time repeats the data so that I can have my treated data returned
return {
mon,
tue,
wed,
}
}
如果你有几个变量要处理,这很好,但在我的例子中,我必须处理超过 30 个对象。
注意:我知道我可以改用这个:
return {
mon: startWeek.mon ? startWeek.mon.total : 0;
...
}
这些解决方案是它能得到的最好的解决方案,或者有更好的方法来避免重复对象 { mon, tue, wed }
或到处写 startWeek.
?
我使用 Object.fromEntries
将对象属性数组映射到新对象,根本不需要列出日期:
const getDocsData = startWeek => Object.fromEntries(
Object.entries(startWeek)
.map(([key, val]) => [key, value ? value.total : 0])
);
如果 startWeek
可能具有其他不需要的属性,请遍历所需属性的数组:
const props = ['mon', 'tue', 'wed'];
const getDocsData = startWeek => Object.fromEntries(
props.map(key =>
[startWeek[key] ? startWeek[key].total : 0]
)
);
一个不那么剧烈的调整,可能是对您的原始代码的轻微改进,将 return 新值内嵌在 returned 对象中,无需重新分配:
function getDocsData(startWeek) {
const {
mon,
tue,
wed,
} = startWeek;
return {
mon: mon ? mon.total : 0,
tue: tue ? tue.total : 0,
wed: tue ? wed.total : 0,
}
}
如果值为假,则为 null 或未定义,您还可以使用可选链接而不是条件运算符:
return {
mon: mon?.total ?? 0,
tue: tue?.total ?? 0,
wed: wed?.total ?? 0,
}