Javascript D3:如何检测.each()的结尾

Javascript D3:如何检测.each()的结尾,javascript,arrays,d3.js,dynamic-arrays,Javascript,Arrays,D3.js,Dynamic Arrays,在D3.js中,我使用以下方法遍历数据: elem.allDataRows.each(function(d, i) { elem.checkboxMemory[i] = { id: d.key, isChecked: d.isChecked }; }); 因为这个过程是异步的,所以我需要能够确定循环过程何时完成 在D3中,是否有任何方法可以检测到.each()的结尾?不是每个时间间隔,而是整个过程 请注意,elem.allDataRows是一个数

在D3.js中,我使用以下方法遍历数据:

elem.allDataRows.each(function(d, i) {
    elem.checkboxMemory[i] = {
        id: d.key,
        isChecked: d.isChecked
    };
});
因为这个过程是异步的,所以我需要能够确定循环过程何时完成

在D3中,是否有任何方法可以检测到.each()的结尾?不是每个时间间隔,而是整个过程

请注意,elem.allDataRows是一个数组


谢谢大家!

一种简单的方法是检查索引i的值:


每个
都是同步的

d3.选择全部('div')。每个(函数(){
log(d3.select(this.text());
});
日志(“完成”);
功能日志(文本){
var d=document.createElement('pre');
d、 innerHTML='日志:'+文本;
document.getElementById('output').appendChild(d);
}

1.
2.

首先,我会说
。每个
实际上都是同步的。因此,如果您只想在代码完成后执行代码,那么您可以在
调用后的行中执行此操作

如果在
循环期间试图识别集合中的最后一项,以便应用特殊逻辑,则需要将当前索引与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
    };
});

每个
都是同步的。的确如此。谢谢。这和我发布这个问题后所学的很相似,但你基本上明白了。非常感谢。这和我发布这个问题后的想法很相似,但你基本上明白了。非常感谢。
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
    };
});