|
834 | 834 | function bind(group, groupData) { |
835 | 835 | 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; |
836 | 836 | 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; |
838 | 838 | for (i = -1; ++i < n; ) { |
839 | 839 | if (nodeByKeyValue.has(keyValue = key.call(node = group[i], node.__data__, i))) { |
840 | 840 | exitNodes[i] = node; |
841 | 841 | } else { |
842 | 842 | nodeByKeyValue.set(keyValue, node); |
843 | 843 | } |
844 | | - keyValues.push(keyValue); |
| 844 | + keyValues[i] = keyValue; |
845 | 845 | } |
846 | 846 | 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) { |
848 | 850 | updateNodes[i] = node; |
849 | 851 | node.__data__ = nodeData; |
850 | | - } else if (!dataKeys.has(keyValue)) { |
851 | | - enterNodes[i] = d3_selection_dataNode(nodeData); |
852 | 852 | } |
853 | | - dataKeys.add(keyValue); |
854 | | - nodeByKeyValue.remove(keyValue); |
| 853 | + nodeByKeyValue.set(keyValue, true); |
855 | 854 | } |
856 | 855 | for (i = -1; ++i < n; ) { |
857 | | - if (nodeByKeyValue.has(keyValues[i])) { |
| 856 | + if (nodeByKeyValue.get(keyValues[i]) !== true) { |
858 | 857 | exitNodes[i] = group[i]; |
859 | 858 | } |
860 | 859 | } |
|
0 commit comments