【问题标题】:Problems with immutable array不可变数组的问题
【发布时间】:2017-02-23 10:25:24
【问题描述】:

最近我开始使用 D3.js 绘制晒伤图。数据以 JSON 格式提供。对于一些设计的东西,我想交换一些项目(在 D3 文档中称为 childrens)。 我知道在 JS 数组中是对象......所以是这样的:

var buffer = myarray[2];

只是一个参考。因此,用于交换的缓冲区无效(?)。 因此,我在我的代码中发明了第二个数组(childrens_final),它在交换过程中采用项目。它只是遍历每个项目,第二次迭代正在寻找具有相同名称的项目以连续设置具有相同名称的项目。因此交换。

var childrens = response_data.data.data['children'];
var childrens_final = []
for (var child = 0; child < childrens.length; child++) {
    var category = childrens[child];
    var found = false;
    var i = child+1
    while (!(found) && (i < childrens.length)) {
        if (childrens[i]['name'] == category['name']) {
            var childrens = swapArrayElements(childrens, child+1, i);
            var one = childrens[child];
            var two = childrens[child+1]
            found = true;
            }
            i++;
            }
            if (found) {
                childrens_final.push(one);
                childrens_final.push(two);
                child++;
            }
            else {
                childrens_final.push(childrens[child])
            }
        }
response.data.data['children'] = childrens_final;
return response.data.data;

函数 swapArrayElements() 只是使用拼接:

function swapArrayElements(list, x, y) {
    if (list.length ==1) return list;
    list.splice(x, 1, list.splice(y,1, list[x])[0]);
    return list;
}

问题是图表中的交换仍然没有影响。但是在记录childrens_final时。控制台中有类似的东西:

Array [ Object, Object, Object, Object, Object, Object, Object, Object, Object ]

对象的顺序正确!但是在数组中仍然有旧的顺序。 这实际上很基本,但我没有看到解决方案。

顺便说一句...代码在 AngularJS 下运行。

【问题讨论】:

  • 你有样本数据来运行这个吗?
  • 是的,当然...jsfiddle.net/b2b6n78e 抱歉...没有找到更好的存储方式

标签: javascript angularjs d3.js


【解决方案1】:

发现问题。这是一个 D3.js 问题。 D3 正在对数据本身进行排序。您必须明确设置:

d3.layout.partition.sort(null)

否则每个预排序过程都没有效果。

【讨论】:

  • 找到这个link for Layouts。有一个函数 .sort() 可以设置为空。如果不是默认为降序。但无论如何你是对的。函数是 d3.layout.partition.sort()。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 2011-02-01
相关资源
最近更新 更多