D3:如何检测 .each() 的结束
D3: How to detect the end of the .each()
在 D3.js 中,我使用以下方法遍历数据:
elem.allDataRows.each(function(d, i) {
elem.checkboxMemory[i] = {
id: d.key,
isChecked: d.isChecked
};
});
由于这个过程是异步的,我需要能够确定循环过程何时完成。
他们在 D3 中有什么方法可以让我检测到 .each() 的结尾吗?不是针对每个间隔,而是针对整个过程。
郑重声明,elem.allDataRows是一个数组。
谢谢!
一种简单的方法是检查索引的值 i:
function(d, i) {
if (i == elem.allDataRows.length - 1){
// last element
}
elem.checkboxMemory[i] = {
id: d.key,
isChecked: d.isChecked
};
}
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>
首先我会说 .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
};
});
在 D3.js 中,我使用以下方法遍历数据:
elem.allDataRows.each(function(d, i) {
elem.checkboxMemory[i] = {
id: d.key,
isChecked: d.isChecked
};
});
由于这个过程是异步的,我需要能够确定循环过程何时完成。
他们在 D3 中有什么方法可以让我检测到 .each() 的结尾吗?不是针对每个间隔,而是针对整个过程。
郑重声明,elem.allDataRows是一个数组。
谢谢!
一种简单的方法是检查索引的值 i:
function(d, i) {
if (i == elem.allDataRows.length - 1){
// last element
}
elem.checkboxMemory[i] = {
id: d.key,
isChecked: d.isChecked
};
}
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>
首先我会说 .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
};
});