Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.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 在ObservalArray淘汰JS中切换值?_Javascript_Arrays_Knockout.js_Observable - Fatal编程技术网

Javascript 在ObservalArray淘汰JS中切换值?

Javascript 在ObservalArray淘汰JS中切换值?,javascript,arrays,knockout.js,observable,Javascript,Arrays,Knockout.js,Observable,基本上我有一个列表,列表中的每个项目都有一个唯一的值。如果单击列表项,我希望从可观察数组中添加或删除该值。因此,如果该值存在于数组中,我想删除它,反之亦然 阵列的结构将很简单: var items = ko.observableArray([ "value1", "value2" ]); 该列表将包含带有value1和value2的输入。如果单击了带有value2的列表,我想将其从数组中删除,如果没有,我需要将其推送到数组中 所以基本上我需要切换数组中的一个项 使用knocko

基本上我有一个列表,列表中的每个项目都有一个唯一的值。如果单击列表项,我希望从可观察数组中添加或删除该值。因此,如果该值存在于数组中,我想删除它,反之亦然

阵列的结构将很简单:

var items = ko.observableArray([
    "value1",
    "value2"
]);
该列表将包含带有
value1
value2
的输入。如果单击了带有
value2
的列表,我想将其从数组中删除,如果没有,我需要
将其推送到数组中

所以基本上我需要切换数组中的一个项


使用knockout.js是否可以这样做?谢谢

当然。Knockout的observableArray内置了一个
indexOf
方法。使用它,连同
删除
一起执行您的请求。像这样的方法应该会奏效:

function toggle(value){
    if (items.indexOf(value) < 0){
        //it's not in the array - push it
        items.push(value);
    } else {
        //it's there - remove it
        items.remove(value);
    }
}
功能切换(值){
if(项目索引OF(值)<0){
//它不在数组中-推它
项目。推送(价值);
}否则{
//就在那里-把它拿走
项目。删除(值);
}
}

我之前试过这个。出于某种原因,代码会推送该值,但会立即将其删除。就像if-else不起作用一样…它基本上会切换两次值。。。除了添加alert()时,它只执行一次。o、 o我已经尝试解决这个问题有一段时间了。我将它绑定到一个
tap
函数,而不是click…可能这就是问题所在。还有别的问题。不过,上述方法是可行的