我试图从可观察的数组中删除一个对象,但我放弃了。
我使用knockout.js和devextreme。
如何从数组中删除对象?
javascript
CaptionViewOptions: {
items: self.FunctionsList,
showCheckBoxesMode: true,
height: 400,
searchValue: self.searCachInput,
parentIdExpr: "ID",
keyExpr: "ID",
displayExpr: "ControlCaption",
onItemSelectionChanged:
function (s) {
self.selfID();
self.Control();
self.selfID(s.itemData.ID);
self.Control(s.itemData.Control);
if (s.itemData.selected === true) {
var item = {selfID:self.selfID() ,Control:self.Control() }
self.SelectedFunction.push(item);
}
else {
var itemstodelete = { selfID: self.selfID(), Control: self.ControlCaption() };
SelectedFunction.remove(itemstodelete);
}
}
html
<div data-bind="dxTextBox:vm.SubViewModel.CaptionSearchOptions"></div>
答案 0 :(得分:0)
假设SelectedFunction
是一个数组,您尝试删除的值在数组中不存在,因为您正在创建一个全新的对象。即使对象中的值与存在的值相同,它也不是同一个对象,并且永远不会与数组中的那个“相等”。
请参阅:Object equality in javascript
您必须通过手动比较值来更改代码以搜索现有对象。
...
else {
//var itemstodelete = { selfID: self.selfID(), Control: self.ControlCaption() };
for(var i=0; i<SelectedFunction.length; i++){
if(SelectedFunction[i].selfID === self.selfID() && SelectedFunction[i].Control === self.ControlCaption()){
SelectedFunction.remove(SelectedFunction[i]); //this can be rewritten to remove via the index to be more efficient
}
}
}