首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将数组转换为具有每个键的特定名称的JavaScript对象

如何将数组转换为具有每个键的特定名称的JavaScript对象
EN

Stack Overflow用户
提问于 2018-08-01 22:54:10
回答 3查看 297关注 0票数 1

我尝试使用JavaScript将以下数组转换为JavaScript对象,但我不知道如何操作。

这是我的输入数组。对于此数组,每个键表示一周中的某一天(从周日到周六)。所以关键字0=星期天,关键字1=星期一,通向关键字6 ....all =星期六。

代码语言:javascript
复制
var times = [["8:30-12:00","14:00-18:00"],
["6:15-9:30","13:00-16:00","20:00-23:15"],[],["9:00-21:00"],
["9:00-21:00"],[],[]];

这是我想将上面的times数组转换成的JavaScript对象:

代码语言:javascript
复制
timeObj = {
  sunday: [
    {
      start: '08:30',
      stop: '12:00'
    },
    {
      start: '14:00',
      stop: '18:00'
    }
  ],
  monday: [
    {
      start: '06:15',
      stop: '9:30'
    },
    {
      start: '13:00',
      stop: '16:00'
    },
    {
      start: '20:00',
      stop: '23:15'
    }
  ],
  tuesday: [],
  wednesday: [
    {
       start: '9:00',
       stop: '21:00'
    }
  ],
  thursday:  [
    {
       start: '9:00',
       stop: '21:00'
    }
  ],
  friday:  [],
  saturday:  []
};

将数组times转换为对象timeObj的最佳方法是什么?

EN

回答 3

Stack Overflow用户

发布于 2018-08-01 23:04:09

您可以创建相应日期的数组并循环它。在每次迭代中,在结果对象中创建当天的键,其值将是开始和结束时间。

代码语言:javascript
复制
var times = [["8:30-12:00","14:00-18:00"],["6:15-9:30","13:00-16:00","20:00-23:15"],[],["9:00-21:00"],["9:00-21:00"],[],[]];
var days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
var result = {};

days.forEach((day, index) => {
  result[day] = times[index]
    .map(item => {
      let [start, stop] = item.split('-');
      return {start, stop};
    });
});

console.log(result);

票数 4
EN

Stack Overflow用户

发布于 2018-08-01 23:06:46

我的建议是对于一级列表使用Array.prototype.reduce,对于二级列表使用Array.prototype.map来创建适当的数组对象:

代码语言:javascript
复制
const data = [["8:30-12:00","14:00-18:00"],["6:15-9:30","13:00-16:00","20:00-23:15"],[],["9:00-21:00"],["9:00-21:00"],[],[]];
const days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];

const result = data.reduce((acc, item, index) => { 
  acc[days[index]] = 
    item.map(day => ({ 
      start: day.substr(0, day.indexOf('-')), 
      end: day.substring(day.indexOf('-') + 1)
    }));
  return acc;
 }, {});
票数 3
EN

Stack Overflow用户

发布于 2018-08-01 23:13:19

这就是了:

代码语言:javascript
复制
let dayNames = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']

let times = [
  ["8:30-12:00", "14:00-18:00"],
  ["6:15-9:30", "13:00-16:00", "20:00-23:15"],
  [],
  ["9:00-21:00"],
  ["9:00-21:00"],
  [],
  []
]

const res = {}
for (let i = 0; i < 7; i++) {
  const items = []
  res[dayNames[i]] = items
  times[i].forEach(pair => {
    const parts = pair.split('-')
    items.push({
      start: parts[0],
      end: parts[1]
    })
  })
}
console.log(res);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51636435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档