vis.js:删除数据集中项目的属性

时间:2016-10-14 16:54:10

标签: javascript vis.js

我正在使用vis.js visualization library。我有一个使用

实例化的vis.js dataset
var nodes = new vis.DataSet([
    {id: 1, label: 'Item 1', group: "special"},
    {id: 2, label: 'Item 2'},
}

我想删除该群组" special"。之后,数据集的状态应该与没有组实例化的数据集相同:

var nodes2 = new vis.DataSet([
    {id: 1, label: 'Item 1'},
    {id: 2, label: 'Item 2'},
}

如何从数据集对象中的项目中删除属性,而不删除项目本身?

我测试的方法没有成功:nodes.update({id:1, groups: undefined}) nodes.update({id:1, groups: null})nodes.update({id:1, groups: 0})

1 个答案:

答案 0 :(得分:0)

Vis JS,合并对象的值,因此只添加/修改新值但不删除现有值。我最终得到了删除/插入逻辑。在你的情况下,我会这样做:

let nodes = new vis.DataSet([
  {id: 1, label: 'Item 1', group: "special"},
  {id: 2, label: 'Item 2'},
}

let nodeId = 1;
let propertyToRemove = 'group';
// get a node
let node = nodes.get(nodeId);
// remove property
delete node[propertyToRemove];

// get positions (only for nodes with x and y coordinates)
// only if x and y are not present on original node
let coordinates = vis.Network.getPositions([nodeId])[nodeId];
// copy coordinates
node = Object.assign(node, coordinates); 

// remove node
nodes.remove(nodeId);
// add cloned node
nodes.add(node);

为方便起见,您可以在vis.DataSet.prototype上将此代码编写为函数