#javascript
#javascript
Вопрос:
Мне трудно описать это, поскольку я не могу воссоздать какие-либо изолированные экземпляры. Установка логического значения внутри оператора if устанавливается до того, как оно когда-либо достигнет оператора if . Я думал, что это связано с тем, что на консоли журнал отображается не по порядку, но теперь я вижу результат в цикле j for при возникновении, если я не удалю notesObj.trans.all.combined[i].played = true
.
if(shapesNotes.length === 2){
if(shapesNotes[1].trans.all.combined.length == 2){
console.log("troubled value = " shapesNotes[1].trans.all.combined[1].played)
}
}
function setTranspositionsForAllNotes(notesObj,debugIndex){
for(var i=0; i<notesObj.trans.all.combined.length; i){
var transNoteAt = notesObj.trans.all.combined[i].noteAt
var transPlayed = notesObj.trans.all.combined[i].played
console.log("debugIndex = " debugIndex " i = " i)
console.log("notesObj.trans.all.combined.length = " notesObj.trans.all.combined.length)
console.log("notesObj.trans.all.combined[" i "].played = " notesObj.trans.all.combined[i].played)
console.log("shapesNotes[" debugIndex "].trans.all.combined[" i "].played = " shapesNotes[debugIndex].trans.all.combined[i].played)
console.log("noteAt = " noteAt " transNoteAt = " transNoteAt)
if(transPlayed === false amp;amp;
noteAt >= transNoteAt){
var transInterval = notesObj.trans.all.combined[i].interval
for(var j=0; j<notesObj.trans.array.length; j){
notesObj.trans.array[j] = transInterval
notesObj.trans.freqsPlusTrans[j] = getFrequencyPlusTranspositionForFreqIndex(notesObj,j)
}
console.log("transInterval = " transInterval " for " debugIndex " i = " i)
notesObj.trans.all.combined[i].played = true
}
}
}
var debugIndex = 0;
shapesNotes.forEach(function(shapeNotes) {
setTranspositionsForAllNotes(shapeNotes,debugIndex)
debugIndex =1
});
Просто чтобы включить то, что показывает мой журнал, вот оно:
1980 troubled value = false
1981 debugIndex = 0 i = 0
1982 notesObj.trans.all.combined.length = 2
1983 notesObj.trans.all.combined[0].played = false
1984 shapesNotes[0].trans.all.combined[0].played = false
1986 noteAt = 0.008333333333333333 transNoteAt = 0
1998 transInterval = 0 for 0 i = 0
1981 debugIndex = 0 i = 1
1982 notesObj.trans.all.combined.length = 2
1983 notesObj.trans.all.combined[1].played = false
1984 shapesNotes[0].trans.all.combined[1].played = false
1986 noteAt = 0.008333333333333333 transNoteAt = 0
1998 transInterval = 2 for 0 i = 1
1981 debugIndex = 1 i = 0
1982 notesObj.trans.all.combined.length = 2
1983 notesObj.trans.all.combined[0].played = false
1984 shapesNotes[1].trans.all.combined[0].played = false
1986 noteAt = 0.008333333333333333 transNoteAt = 0
1998 transInterval = 0 for 1 i = 0
1981 debugIndex = 1 i = 1
1982 notesObj.trans.all.combined.length = 2
1983 notesObj.trans.all.combined[1].played = true
1984 shapesNotes[1].trans.all.combined[1].played = true
1986 noteAt = 0.008333333333333333 transNoteAt = 0
Обратите внимание, что для моего «проблемного значения» установлено значение false для shapeNotes[1] для combined[1] в соответствии с журналом, но когда оно достигает этого значения в моем первом цикле for, оно сразу же каким-то образом устанавливается в true, и цикл j for внутри или журнал консоли никогда не отображаются. Как ни странно, логическая настройка notesObj.trans.all.combined[i].played = true
внутри transPlayed === false amp;amp; noteAt >= transNoteAt
условия выполняется немедленно, и в то же время ни один другой код внутри этого условия не выполняется, даже если я установил точку останова.
Комментарии:
1. Возможно ли, что две записи в массиве ссылаются на один и тот же объект, для свойства played которого вы уже установили значение true?
2. Для меня это звучит правдоподобно — naming (
all.combined
) предполагает, что они могут быть одной и той же ссылкой на объект.3. Возвращает ли это значение true?
shapesNotes[0].trans.all.combined[1] === shapesNotes[1].trans.all.combined[1]
4. просто в качестве теста: используйте точки с запятой в конце каждой строки / функции / блока кода (по назначению). Мне любопытно посмотреть, изменит ли это что-нибудь. * конечно: сохраните копию раньше…
5. Объекты внутри массивов являются одной и той же ссылкой — concat вернет новые ссылки на массив, хотя
Ответ №1:
Возможно, вам следует изменить i на i
Комментарии:
1. Это интересное предложение, но, к сожалению, это не имеет никакого эффекта.