2015-03-19 2 views
1

В D3.js, я пересекающий через данные, используя следующий метод:D3: Как определить конец .each()

elem.allDataRows.each(function(d, i) { 
    elem.checkboxMemory[i] = { 
     id: d.key, 
     isChecked: d.isChecked 
    }; 
}); 

Поскольку этот процесс является асинхронным, я должен быть в состоянии определить, когда цикл завершен.

Это их способ в D3, который я могу обнаружить в конце .each()? Не для каждого интервала, а всего процесса.

Только для записи elem.allDataRows - это массив.

Спасибо!

+1

'каждый' является синхронным –

+0

Упс. Так что, это. Спасибо. – incarnate

ответ

0

Один простой способ проверить значение индекса я:

function(d, i) { 
    if (i == elem.allDataRows.length - 1){ 
     // last element 
    } 
    elem.checkboxMemory[i] = { 
     id: d.key, 
     isChecked: d.isChecked 
    }; 
} 
+1

Это было похоже на то, что я склонялся ПОСЛЕ того, как я опубликовал этот вопрос, но вы в основном его получили. Спасибо! – incarnate

1

each синхронно.

d3.selectAll('div').each(function() { 
 
log(d3.select(this).text()); 
 
}); 
 

 
log('done'); 
 

 
function log(text) { 
 
    var d = document.createElement('pre'); 
 
    d.innerHTML = 'log: ' + text; 
 
    document.getElementById('output').appendChild(d); 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script> 
 
<div>1</div> 
 
<div>2</div> 
 

 
<output id="output"></output>

1

Сначала я хотел бы начать с того, что .each фактически синхронное. Поэтому, если все, что вы хотите сделать, это выполнить код после его завершения, вы можете сделать это в строке, следующей за вызовом .each.

Если вы пытаетесь идентифицировать последний элемент в своей коллекции во время цикла .each, чтобы применить специальную логику, вам нужно сравнить текущий индекс с длиной вашего объекта jquery. См. Мой пример ниже.

var lastIndex = elem.allDataRows.length - 1; 
elem.allDataRows.each(function(d, i) { 
    if (i == lastIndex) { 
     // Do something cool here! 
    } 

    elem.checkboxMemory[i] = { 
     id: d.key, 
     isChecked: d.isChecked 
    }; 
}); 
+0

Это было похоже на то, что я склонялся ПОСЛЕ того, как я опубликовал этот вопрос, но вы в основном его получили. Спасибо! – incarnate

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