Skip to content

Commit 09f43b1

Browse files
committed
Merge branch 'optimize-data' into optimize-map-create-null
Conflicts: src/selection/data.js
2 parents 4c14f5f + acfbdd4 commit 09f43b1

3 files changed

Lines changed: 15 additions & 18 deletions

File tree

d3.js

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -834,27 +834,26 @@
834834
function bind(group, groupData) {
835835
var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData;
836836
if (key) {
837-
var nodeByKeyValue = new d3_Map(), dataKeys = new d3_Set(), keyValues = [], keyValue;
837+
var nodeByKeyValue = new d3_Map(), keyValues = new Array(n), keyValue;
838838
for (i = -1; ++i < n; ) {
839839
if (nodeByKeyValue.has(keyValue = key.call(node = group[i], node.__data__, i))) {
840840
exitNodes[i] = node;
841841
} else {
842842
nodeByKeyValue.set(keyValue, node);
843843
}
844-
keyValues.push(keyValue);
844+
keyValues[i] = keyValue;
845845
}
846846
for (i = -1; ++i < m; ) {
847-
if (node = nodeByKeyValue.get(keyValue = key.call(groupData, nodeData = groupData[i], i))) {
847+
if (!(node = nodeByKeyValue.get(keyValue = key.call(groupData, nodeData = groupData[i], i)))) {
848+
enterNodes[i] = d3_selection_dataNode(nodeData);
849+
} else if (node !== true) {
848850
updateNodes[i] = node;
849851
node.__data__ = nodeData;
850-
} else if (!dataKeys.has(keyValue)) {
851-
enterNodes[i] = d3_selection_dataNode(nodeData);
852852
}
853-
dataKeys.add(keyValue);
854-
nodeByKeyValue.remove(keyValue);
853+
nodeByKeyValue.set(keyValue, true);
855854
}
856855
for (i = -1; ++i < n; ) {
857-
if (nodeByKeyValue.has(keyValues[i])) {
856+
if (nodeByKeyValue.get(keyValues[i]) !== true) {
858857
exitNodes[i] = group[i];
859858
}
860859
}

0 commit comments

Comments
 (0)