为了进一步使用我的函数,有必要知道过滤后的数组的长度。直到知道我已经写了这个来测试基本功能:
function isInGraph(jnode){
java.alert(jnode.name);
}
var difference = json.nodes.filter(isInGraph);
java.alert(JSON.stringify(difference));
java.alert()
是一个在控制台中打印的自定义方法。正如预期的那样,它只会在name property
中打印出每个元素的名称json.nodes
一次。
但是如何确定json.nodes
内isInGraph
的长度?我尝试使用filter
函数提供的额外参数arr.filter(callback[, thisArg])
找到here。
var difference = json.nodes.filter(isInGraph, json.length);
function isInGraph(jnode){
java.alert(jnode.name);
java.alert(Number(this));
}
以上代码仅打印NaN
。如何在json.nodes.length
函数中使用isInGraph
?
结构:
{
"nodes":[
{...},
{...}
],
"links":[
{...},
{...}
]
}
d3图表非常标准。
答案 0 :(得分:2)
基本上你不能,但你可以做一些解决方法来实现这个目标。
您应该向isInGraph
函数添加其他参数,并将其传递给另一个匿名函数
function isInGraph(jnode, arrayLength){
java.alert(jnode.name);
}
var len = json.nodes.length;
var difference = json.nodes.filter(function(el) { return isInGraph(el, len); });
答案 1 :(得分:1)
filter
的第二个参数是将在回调中设置为this
的对象。您可以有效地使用它来传递信息:
var array = [1, 2, 3, 4];
function isInGraph(node) {
// this.len contains the length
document.body.appendChild(document.createTextNode("len: "+this.len+" "));
return true;
}
array.filter(isInGraph, {len: array.length});