$(document).ready(function(){
var available=["1","2","3","4"];
var taken=[];
var solutions=[["1","2"],["3","4"]];
// external function
function check(input){
for(var i=0;i<solutions.length;i++){
var result=solutions[i].every(function(elem){
return input.includes(elem)==true;
})
if(result==true){
return result;
}
}
}
// click event
$("table td").click(function(){
debugger
var removed=available.splice(available.indexOf(this.id),1);
taken.push(removed);
check(taken); // the call works if the array *taken* is initialize
//by hand, but doesn't work filling the array with
//the push method as always return an undefined value
})
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table style="width:100%">
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
</tr>
<tr>
<td>Jill</td>
<td>Smith</td>
<td>50</td>
</tr>
<tr>
<td>Eve</td>
<td>Jackson</td>
<td>94</td>
</tr>
</table>
我尝试检查一个数组(采用),该数组填充了从表中的点击派生的值,而不是解决方案数组中包含的数组。为此,我使用一个执行该作业的参数进行了函数检查。数组 take 作为参数传递给函数,并通过方法push填充可用值。
范围看起来很好,因为如果我使用满足其中一个解决方案的值初始化采用,则函数 check 的返回为真。 但是将push方法应用于变量 take 返回始终是未定义的,因此似乎全局采用未填充push或类型不同?。
答案 0 :(得分:1)
我发现 available.splice(available.indexOf(this.id),1)返回的对象不是字符串,所以我需要将它转换为带有toString()的字符串来制作take数组是一个字符串数组,而不是一个对象数组。
答案 1 :(得分:0)
函数调用没有问题,请检查你的外部函数,它应该返回true或false,因为你的代码只能在一个场景中返回。试试这个功能 -
function check(input){
for(var i=0;i<solutions.length;i++){
var result = false;
result=solutions[i].every(function(elem){
return input.includes(elem)==true;
})
return result;
}
}