Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Knockout JS:将可观察数组作为参数传递_Javascript_Arrays_Knockout.js_Arguments_Observable - Fatal编程技术网

Javascript Knockout JS:将可观察数组作为参数传递

Javascript Knockout JS:将可观察数组作为参数传递,javascript,arrays,knockout.js,arguments,observable,Javascript,Arrays,Knockout.js,Arguments,Observable,我有一个2d可观察数组,名为textFields: var t1 = ko.observableArray([{val: 0}, {val:0}]) self.textFields = ko.observableArray([t1]); 我有一个名为solve的函数,它应该接受一个参数: self.solve = function(arr){ console.log(arr); } 在我的html中,我将该函数与一个链接单击相关联,该链接单击将文本字段作为要求解的参数传递: <a

我有一个2d可观察数组,名为textFields:

var t1 = ko.observableArray([{val: 0}, {val:0}])
self.textFields = ko.observableArray([t1]);
我有一个名为solve的函数,它应该接受一个参数:

self.solve = function(arr){
console.log(arr);
}   
在我的html中,我将该函数与一个链接单击相关联,该链接单击将文本字段作为要求解的参数传递:

<a id='solveBtn' href='#' data-bind='click: solve(textFields)'>Solve</a>
但是我想把这个可观测数组传递给另一个函数(它应该是一个“普通”数组:

var normalize = function(arr){
    var retArr = [];
    console.log(arr().length);
    for(var i = 0; i < arr.length; i++){
        var temp = [];
        for(var j = 0; j < arr()[i]().length; j++){
            temp.push(arr()[i]()[j].val);
        }
        console.log(temp);
        retArr.push(temp);
    }
    return retArr;
}
var normalize=函数(arr){
var-retArr=[];
console.log(arr().length);
对于(变量i=0;i
console.log(arr())给了我以下错误:消息:对象不是函数。当我将arr视为普通数组时,for循环永远不会执行。这是因为arr[I]的长度为0

非常感谢您的回答


Tony

尝试在标记中执行此操作,以在求解方法中获取数组值

<a id='solveBtn' data-bind='click: function(){solve(textFields())}'>Solve</a>
快速说明:在示例标记中,您正在将一个带有参数的函数设置为click事件。这将导致在页面加载期间执行该函数。将其包装在函数块中总是安全的,如下所示

<a id='solveBtn' data-bind='click: function(){solve(textFields)}'>Solve</a>
求解

谢谢你的回答。我尝试了你的第二个建议,现在它给了我一个控制台输出,看起来像[函数,函数]我想这会更好。当我在调试器中仔细查看这个对象时,它看起来非常复杂。但这可能是由于敲除。更重要的问题是,我下一步想将arr传递给另一个函数。这不起作用。我编辑了这个问题以明确我的意思。对不起,我不确定是哪部分混淆了w检查控制台中的输出时。以下代码将在solve方法中打印结果,还将数组传递给另一个方法并打印结果。self.solve=function(arr){for(var i=0;iWhy可以使用arrParam.length,而不能使用arr.length,但可以使用arr().length?传递的对象不是与原始对象相同吗?我想我得到了:这是因为传递的是arr(),而不是arr。是的,这是正确的。您就快到了。如果要访问可观察对象的内容,请使用括号。获得值后,将其视为普通数组。
self.solve = function(arr){
        console.log(arr());
}
<a id='solveBtn' data-bind='click: function(){solve(textFields)}'>Solve</a>