我如何通过Array.forEach方法使用的函数传递额外的参数?

时间:2014-01-03 08:51:50

标签: javascript arrays foreach

我是一个数组:

var allchildsAr = new Array();

并且我用一个具有parent属性(对象)和chlds属性的对象填充它,这是一个数组。

以下是填充数组的代码:

Ti.API.info("*****allchildsAr["+level+"] is null and "+elmn+" children will be added to it ");
allchildsAr[level] = new Array({parent:elmn,chlds:elmn.getChildren()}); 

以下是我在添加后尝试显示数组的方法:

  Ti.API.info("*****allchildsAr["+level+"] after add");
allchildsAr[level].forEach(logArrayJsonElements);

logArrayJsonElements方法如下:

function logArrayElements(elemnt, indx, array) {
    Ti.API.info("*****Element at [" + indx + "]   : " + elemnt.id);
}

function logArrayJsonElements(elemnt, indx, array) {
    Ti.API.info("*****Element at [" + indx + "]   : " + elemnt.parent.id);
    elemnt.chlds.forEach(logArrayElements);
}

这样可以正常工作,但我想要的是通过logArrayElements传递父元素,这样我就可以将它显示为数组显示元素的父元素(以后再用它做另外的事情.. )

function logArrayElements(elemnt, indx, array, parent) {
    Ti.API.info("*****Element at [" + indx + "]   : " + elemnt.id+" child of :"+parent);
}

现在我感到困惑,因为当logArrayElementsforEach内被调用时,它不会接受参数,并且它们会被隐式传递,如果我添加parent }因为我这样做是为了另一个参数(通常是element参数),无论如何我没有传递任何参数,所以我将如何获得函数内的parent并使{ {1}}像其他参数一样传递它?

3 个答案:

答案 0 :(得分:5)

您可以将forEach行修改为:

来执行此操作
function logArrayJsonElements(elemnt, indx, array) {
    Ti.API.info("*****Element at [" + indx + "]   : " + elemnt.parent.id);
    elemnt.chlds.forEach(function (element, index, arr) {
        logArrayElements(element, index, arr, elemnt.parent.id);
    });
}

答案 1 :(得分:2)

好吧,如果element已经有parent属性,那么为什么不在element.parent中使用logArrayElements

假设元素的数据结构不同,那么bind也部分适用,所以你可以这样做:

function logArrayElements(parent, element, index, array) {
    console.log("Element at [%s] : %s child of %s", index, element.id, parent);
}

function logArrayJsonElements(element, index, array) {
    element.chlds.forEach(logArrayElements.bind(null, element.parent));
}

答案 2 :(得分:1)

logArrayJsonElements绑定logArrayElements内,parent属性设置为parent

function logArrayJsonElements(elemnt, indx, array) {
    Ti.API.info("*****Element at [" + indx + "]   : " + elemnt.parent.id);
    elemnt.chlds.forEach(logArrayElements.bind({parent: elemnt.parent}));
}

logArrayElements.bind({parent: elemnt.parent})将返回一个新的Function对象,其上下文在调用时将设置为{parent: elemnt.parent},允许您使用parent访问this.parent对象}。

修改logArrayElements以删除parent参数并使用this.parent访问父对象:

function logArrayElements(elemnt, indx, array) {
    Ti.API.info("*****Element at [" + indx + "]   : " + elemnt.id+" child of :" this.parent);
}