如何将默认值设置为 JSON 数组

时间:2021-03-22 08:34:47

标签: javascript arrays json

请帮我做这件事!

我按月从数据库中获取数据数组。我遇到的问题是我正在获取像this

这样的数据
[{January: 6}, {February: 2}, {October: 7}, {December: 4}, {November: 5374}]

只要有空值,我什至没有得到任何导致我工作出现问题的值,所以我想要像 this

这样的数据
[{January: 6}, {February: 2}, {March: 0}, {April: 0}, {May: 0}, {June: 0}, {July: 0}, {August: 0}, {September: 0}, {October: 7}, {November: 5373}, {December: 4}]

但是数据是从数据库中动态获取的,它只给我大于 0 的值。我只想获得所有月份的默认值为 0。

4 个答案:

答案 0 :(得分:2)

您可以构建一个对象并使用一组 minth 名称来创建一个对象数组。

const
    year = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'September', 'October', 'November', 'December'],
    data = [{ January: 6 }, { February: 2 }, { October: 7 }, { December: 4 }, { November: 5374 }],
    object = Object.assign({}, ...data),
    result = year.map(month => ({ [month]: object[month] || 0 }));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:1)

您可以使用 Date.toLocaleString()array#from 获取所有月份,然后将 0 分配给缺少的月份。

const input = [{January: 6}, {February: 2}, {October: 7}, {December: 4}, {November: 5374}],
      allMonths = Array.from({length: 12}, 
              (_,i) => new Date(2020,i).toLocaleString({}, {month: 'long'})),
      lookup = Object.assign(...input),
      result = allMonths.map(month => ({ [month]: lookup[month] || 0 }));

console.log(result);

答案 2 :(得分:0)

你可以在你的程序中指定一个默认列表,如果你没有从数据库中获取数据,你就返回到默认列表。

let defaults = [{January: 0}, {February: 0}, {March: 0}, {April: 0}, {May: 0}, {June: 0}, {July: 0}, {August: 0}, {September: 0}, {October: 0}, {November: 0}, {December: 0}];

let databaseValue = [{January: 6}, {February: 2}, {October: 7}, {December: 4}, {November: 5374}];

let monthToSearch = "June";
let databaseFound = databaseValue.find(o => o.hasOwnProperty(monthToSearch));
if (!databaseFound){
  databaseFound = defaults.find(o => o.hasOwnProperty(monthToSearch));
}

console.log(databaseFound);

答案 3 :(得分:0)

给你! 您可以简单地转换获取的数据并通过迭代更新该对象。

var data = [{January: 6}, {February: 2}, {October: 7}, {December: 4}, {November: 5374}];

var theMonths = ["January", "February", "March", "April", "May",
  "June", "July", "August", "September", "October", "November", "December"];

var monthsfetched = data.map(x =>  Object.keys(x)[0]);

theMonths.map(mon => {
  if(!monthsfetched.includes(mon)){  
    let missing_entry = {};
    missing_entry[mon] = 0;
    data.push(missing_entry);
  }
})

console.log(data)

相关问题