显示已过滤数组的长度

时间:2016-02-15 09:48:00

标签: javascript arrays filter

为了进一步使用我的函数,有必要知道过滤后的数组的长度。直到知道我已经写了这个来测试基本功能:

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.nodesisInGraph的长度?我尝试使用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图表非常标准。

2 个答案:

答案 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});

小提琴:https://jsfiddle.net/vqa1th9m/