匹配数组并返回值

3

我正在学习JavaScript/jQuery,需要一些帮助。

基本上,我有一个数组,从下面的Excel表格转换而来

Name    Sun  Mon    Tues    Wed     Thurs   Fri    Sat
John    x   21:00   21:00   21:00   21:00   21:00   x
Smith   x   19:45   19:45   19:45   19:45   19:45   x
Paul    x   19:45   19:45   19:45   19:45   19:45   11:00

"Name", "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat", 
"John", "x", "21:00", "21:00", "21:00", "21:00", "21:00", "x", 
"Smith", "x", "19:45", "19:45", "19:45", "19:45", "19:45", "x", 
"Paul", "x", "19:45", "19:45", "19:45", "19:45", "19:45", "11:00"

我需要的功能:

当输入"John, Monday"或"John, 27/02/2017"时,应返回“21:00”。

如果您有任何示例代码,那将非常感谢,因为我对此还比较陌生。


1
那么,你的问题是“如何将日期转换为星期几?”吗? - Ouroborus
哈哈,不好意思,我会编辑问题的,可能加了太多内容。我的问题是,如果我输入“John”和日期,如何获取输入的值?函数应该返回与姓名John相关联的行中的时间,星期一应该返回21:00。 - Cyb3rHac3r
你是如何知道数据从2017年2月27日开始的?还是只是获取星期几并从数组中获取值? - Jules
@Jules 让我解释一下,最初我有一个 Excel 表格,后来将其转换为 JavaScript 数组,数据没有任何日期,只有星期一、星期二等作为列,时间也是固定的。现在用户将输入他的姓名和一个随机日期(27/02/2017)固定格式,日期的唯一目的是转换为星期几,然后函数会检查他的名字是否与该天匹配,并告诉他时间,例如“John Teague”的答案是有效的,但表格有数百行,所以我使用了在线转换器来转换我的示例数据,因此他的方法也需要手动操作。 - Cyb3rHac3r
请阅读[询问]。关键短语:“搜索和研究”以及“解释...阐明任何阻止您自己解决问题的困难”。 - Heretic Monkey
2个回答

1
假设您可以将数据行转换为数组(请注意,我更改了分钟以进行测试)

var dat = ["Name", "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat", 
"John", "x", "21:00", "21:00", "21:00", "21:00", "21:00", "x", 
"Smith", "x", "19:45", "19:45", "19:45", "19:45", "19:45", "x", 
"Paul", "x", "19:45", "19:45", "19:45", "19:45", "19:45", "11:00"];

var data = [];

for (var i = 1; i < dat.length / 8; i++) {
  data.push(dat.slice(i * 8, (i + 1) * 8));
}

function getIt(name, date) {
  var el = data.find(function(e) {
    return e[0] == name;
  });

  if (el) {
    console.log(el[date.getDay() + 1]);
  } else {
    console.log("not found");
  }
}

getIt("John", new Date());

编辑:将解析字符串添加到数据源数组中。


嘿,朱尔斯,我尝试了你的代码,但似乎无法使其工作,不同的错误不断出现,我会尽力修复它,但你能再看一下吗?顺便说一下,我正在使用jsfiddle。 - Cyb3rHac3r
@Cyb3rHac3r,错误信息是什么?你能分享一下你的jsfiddle吗? - Jules

1
我认为如果你重组数据会更容易。
const data = {
  John: [
      'x',
      '21:00',
      '21:00',
      '21:00',
      '21:00',
      '21:00',
      'x',
  ],
  Smith: [
    'x',
    '19:45',
     '19:45',
    '19:45',
    '19:45',
    '19:45',
    'x',
  ],
  Paul: [
    'x',
    '19:45',
    '19:45',
    '19:45',
    '19:45',
    '19:45',
    '11:00',
  ],
}

数组是用于存储每一天的值,因为Date.getDay()返回基于星期的0..6的数字。(0 = 星期日,等等)。
在JavaScript中,对象可以被视为字典,并且可以使用[]符号访问它们。
const name = 'John';
const dayIndex = new Date('02/28/2017').getDay();
const result = data[name][dayIndex]; // result = 21:00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接