javascript - .fill() 相当于对象

标签 javascript arrays object

我曾尝试使用诸如“对象的填充等价物”之类的术语进行谷歌搜索,但它坚持只向我显示数组的结果(这是有道理的,因为这是一个 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/

相关文章:

javascript - 如何使这个书架网格具有拖动/选择功能?

javascript - 将整个 html 表复制到剪贴板 javascript

javascript - jquery fadein,延迟问题

java - 如何将二维数组展平为一维数组?

javascript - 如何使用 jQuery 选择具有相似属性的元素?

arrays - PowerShell-无法导出到CSV文件

ruby - 在 Ruby 中测试数组包含的最快方法

C++将继承的类传递给期望基类的函数

c++ - 抛出和共享对象的可见性

JavaScript 对象按日期排序