我曾尝试使用诸如“对象的填充等价物”之类的术语进行谷歌搜索,但它坚持只向我显示数组的结果(这是有道理的,因为这是一个 array method )。
我知道如果它是一个数组,我可以做 array.fill(0, 0, 28)
;
但是,我想用预定数量的键填充一个对象。我可以使用类似这样的循环;
let dateObj = {};
for(let i; i < 31; i++){
// fill a key in my object with dateObj.i = ''
}
这样做,但想知道是否有更简单的方法。
我当前的对象看起来像这样;
04-Apr-19: (40) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
05-Apr-19: [{…}]
基本上,我想用它来填充过去 30 天的图表。但是,如您所见,它只包含两天的数据。因此,我需要填补其他 28/29 天。
有什么想法或者我只需要使用循环吗?
最佳答案
这是我刚刚掀起的小东西
let obj = {
'04-Apr-2019': [1, 2, 3],
'05-Apr-2019': [4, 5, 6]
};
const fillMonth = (obj) => {
// fix this - it may not be fully cross browser compatible
let d = new Date(Object.keys(obj)[0].replace(/-/g, '/'));
let year = d.getFullYear();
d.setMonth(d.getMonth() + 1);
d.setDate(0);
let last = d.getDate();
let txtMonth = d.toLocaleDateString('en', {month:'short'});
return Array.from({
length: last
}, (_, i) => ({
[`${(i+1).toString().padStart(2, '0')}-${txtMonth}-${year}`]: null
}));
};
let newObj = Object.assign({}, ...fillMonth(obj), obj);
console.log(newObj);
不过,它确实依赖于至少有一把 key
我假设您想“填满”一个月的 key
这段代码的大部分只是创建一个完整月份的“nn-mmm-yyyy”键,值为空
那么,诀窍就是,答案的核心:
let newObj = Object.assign({}, ...fillMonth(obj), obj);
使用 Object.assign 为您完成繁重的工作,首先,添加一个月中每一天的所有键 ...fillMonth(obj)
,然后添加原始对象,用 obj
其余代码实际上只是快速破解,读取第一个键,从中获取日期,计算该月有多少天,并生成一个对象数组
关于javascript - .fill() 相当于对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55573361/