2016-01-04 3 views
1

В приведенном ниже примере я пытаюсь прикрепить номер недели к человеку динамически. Если номер недели «5», я хочу записать имя «Jeppe». https://jsfiddle.net/wgw8yhnL/Javascript - присвоить значение массива для имени

Это означает, что если я добавлю или удалю человека в массив «учеников», он по-прежнему будет соответствовать значениям для текущего количества людей.

var weeks = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]; 

var students = ["Jeppe", "Tommy", "Rene", "Charlotte"]; 

Я хочу, чтобы соответствовать именам, с номерами, как этот "Jeppe" с номерами 1, 5, 9 "Tommy" с номерами 2, 6, 10 "Рене" с номерами 3 , 7, 11 «Шарлотта» с номерами 4, 8, 12

Надеются, что вы можете мне помочь :)

+7

Звучит как основной цикл 'for' для меня. Вы знакомы с [модулем оператора] (http://stackoverflow.com/questions/8900652/what-does-do-in-javascript)? – Blazemonger

+2

Вы пробовали что-нибудь? –

+0

Я хочу вывести имя. Если номер недели равен «5», должен выйти «Jeppe». Как и в этой статье, только с nth в css. https://css-tricks.com/how-nth-child-works/ – Giefdonut

ответ

1
Date.prototype.getWeek = function() { 
    // Create a copy of this date object 
    var target = new Date(this.valueOf()); 

    // ISO week date weeks start on monday 
    // so correct the day number 
    var dayNr = (this.getDay() + 6) % 7; 

    // ISO 8601 states that week 1 is the week 
    // with the first thursday of that year. 
    // Set the target date to the thursday in the target week 
    target.setDate(target.getDate() - dayNr + 3); 

    // Store the millisecond value of the target date 
    var firstThursday = target.valueOf(); 

    // Set the target to the first thursday of the year 
    // First set the target to january first 
    target.setMonth(0, 1); 
    // Not a thursday? Correct the date to the next thursday 
    if (target.getDay() != 4) { 
    target.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7); 
    } 

    // The weeknumber is the number of weeks between the 
    // first thursday of the year and the thursday in the target week 
    return 1 + Math.ceil((firstThursday - target)/604800000); // 604800000 = 7 * 24 * 3600 * 1000 
} 

function getName(weeknr, students) { 
    mod = weeknr % students.length; 
    console.log(mod); 
    return students[mod]; 

} 

var today = new Date(); 
var students = ["Jeppe", "Tommy", "Rene", "Charlotte"]; 

console.log(getName(today.getWeek(), students)); 

https://jsfiddle.net/wgw8yhnL/2/

0

Просто получить индекс в students массиве на основе текущей неделе, вы даже не нужен массив weeks.

var week = 6; 
var students = ["Jeppe", "Tommy", "Rene", "Charlotte"]; 

var index = (week - 1) % 4 
var student = students[index] 

alert(student); 

Вот улучшенная демо: https://jsfiddle.net/oL2otkj9/2/

var students = ["Jeppe", "Tommy", "Rene", "Charlotte"]; 

function getStudentName(week) { 
    var index = (week - 1) % students.length; 
    return students[index]; 
} 

var weekInput = document.getElementById('week'); 
var output = document.getElementById('student'); 

weekInput.addEventListener('change', function() { 
    output.innerHTML = getStudentName(this.value); 
}); 
+1

Здесь вы можете использовать 'students.length' вместо' 4': '(неделя - 1)% 4' – nils

0

может быть, это помогло вам

var students = JSON.stringify({ 
    Jeppe: [1,5,9], 
    Tommy: [2,6,10], 
    Rene: [3,7,11], 
    Charlotte: [4,8,12] 
}); 
var needle = '1'; // find Jeppe 
var part = students.slice(0, students.indexOf(needle)); 
var lastIndex = part.lastIndexOf('"'); 
var name = part.slice(part.slice(0, lastIndex).lastIndexOf('"') + 1, lastIndex); // returns Jeppe 
0

Я не понимаю, очень четко Вида вывод вы ищете и не понимаете, почему массив недель состоит из строк. Может ли этот массив иметь другие значения, чем 1, 2, ..., 12? Строковые значения? Во всяком случае, если то, что вы ищете комбинационной код, вещь, как это было бы достаточно:

var strRet = ""; 
for(var i = 1; i < 13; i++) 
{ 
    strRet += i + ": "; 
    var index = (i - 1) % 4; 
    strRet += students[index] + "\n"; 
} 

alert(strRet); 

Новая линия и оповещение только ради кода, конечно ....

0

Использование студентов в качестве структуры вы можете легко отобразить:

{"A":[1,4,7,10],"B":[2,5,8,11],"C":[3,6,9,12]} 

для дано:

var students = {"A": [], "B": [], "C":[]}; 
var weeks = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]; 

S ee this JSFiddle

Смежные вопросы