提交 8db26838 编写于 作者: L lang

Different key getter of old and new data when do diff

上级 c39310af
...@@ -76,7 +76,7 @@ define(function (require) { ...@@ -76,7 +76,7 @@ define(function (require) {
})); }));
var columns = [categoryAxis.model.getCategories()]; var columns = [categoryAxis.model.getCategories()];
zrUtil.each(group.series, function (series) { zrUtil.each(group.series, function (series) {
columns.push(series.getData().mapArray(valueAxisDim, function (val) { columns.push(series.getRawData().mapArray(valueAxisDim, function (val) {
return val; return val;
})); }));
}); });
...@@ -102,7 +102,7 @@ define(function (require) { ...@@ -102,7 +102,7 @@ define(function (require) {
*/ */
function assembleOtherSeries(series) { function assembleOtherSeries(series) {
return zrUtil.map(series, function (series) { return zrUtil.map(series, function (series) {
var data = series.getData(); var data = series.getRawData();
var lines = [series.name]; var lines = [series.name];
var vals = []; var vals = [];
data.each(data.dimensions, function () { data.each(data.dimensions, function () {
...@@ -280,6 +280,7 @@ define(function (require) { ...@@ -280,6 +280,7 @@ define(function (require) {
header.style.cssText = 'margin: 10px 20px;'; header.style.cssText = 'margin: 10px 20px;';
var textarea = document.createElement('textarea'); var textarea = document.createElement('textarea');
textarea.style.cssText = 'display:block;width:100%;font-size:14px;line-height:1.6rem;font-family:Monaco,Consolas,Courier New'; textarea.style.cssText = 'display:block;width:100%;font-size:14px;line-height:1.6rem;font-family:Monaco,Consolas,Courier New';
textarea.readOnly = model.get('readOnly');
var result = getContentFromModel(ecModel); var result = getContentFromModel(ecModel);
textarea.value = result.value; textarea.value = result.value;
......
...@@ -5,11 +5,12 @@ define(function(require) { ...@@ -5,11 +5,12 @@ define(function(require) {
return item; return item;
} }
function DataDiffer(oldArr, newArr, keyGetter) { function DataDiffer(oldArr, newArr, oldKeyGetter, newKeyGetter) {
this._old = oldArr; this._old = oldArr;
this._new = newArr; this._new = newArr;
this._keyGetter = keyGetter || defaultKeyGetter; this._oldKeyGetter = oldKeyGetter || defaultKeyGetter;
this._newKeyGetter = newKeyGetter || defaultKeyGetter;
} }
DataDiffer.prototype = { DataDiffer.prototype = {
...@@ -43,20 +44,21 @@ define(function(require) { ...@@ -43,20 +44,21 @@ define(function(require) {
execute: function () { execute: function () {
var oldArr = this._old; var oldArr = this._old;
var newArr = this._new; var newArr = this._new;
var keyGetter = this._keyGetter; var oldKeyGetter = this._oldKeyGetter;
var newKeyGetter = this._newKeyGetter;
var oldDataIndexMap = {}; var oldDataIndexMap = {};
var newDataIndexMap = {}; var newDataIndexMap = {};
var i; var i;
initIndexMap(oldArr, oldDataIndexMap, keyGetter); initIndexMap(oldArr, oldDataIndexMap, oldKeyGetter);
initIndexMap(newArr, newDataIndexMap, keyGetter); initIndexMap(newArr, newDataIndexMap, newKeyGetter);
// Travel by inverted order to make sure order consistency // Travel by inverted order to make sure order consistency
// when duplicate keys exists (consider newDataIndex.pop() below). // when duplicate keys exists (consider newDataIndex.pop() below).
// For performance consideration, these code below do not look neat. // For performance consideration, these code below do not look neat.
for (i = 0; i < oldArr.length; i++) { for (i = 0; i < oldArr.length; i++) {
var key = keyGetter(oldArr[i]); var key = oldKeyGetter(oldArr[i]);
var idx = newDataIndexMap[key]; var idx = newDataIndexMap[key];
// idx can never be empty array here. see 'set null' logic below. // idx can never be empty array here. see 'set null' logic below.
......
...@@ -760,8 +760,11 @@ define(function (require) { ...@@ -760,8 +760,11 @@ define(function (require) {
*/ */
listProto.diff = function (otherList) { listProto.diff = function (otherList) {
var idList = this._idList; var idList = this._idList;
var otherIdList = otherList && otherList._idList;
return new DataDiffer( return new DataDiffer(
otherList ? otherList.indices : [], this.indices, function (idx) { otherList ? otherList.indices : [], this.indices, function (idx) {
return otherIdList[idx] || (idx + '');
}, function (idx) {
return idList[idx] || (idx + ''); return idList[idx] || (idx + '');
} }
); );
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册