我有一个空数组和一个可选择的树,每当用户检查或取消检查节点时,我正在推送节点的id,如果该复选框为true或false。
但是现在如果用户检查然后取消检查节点,那么同一节点的数组中将有两个对象,我怎样才能确保不会发生?
//creating empty array
var checkedItems = [];
//(in kendo observable) on user selection I'm pushing the checked node to array
onItemChecked : function (e) {
var node = e.sender.dataItem(e.node);
checkedItems.push({Id: node.Id, IsChecked: node.checked});
},
答案 0 :(得分:4)
在推送新对象之前,您可以检查是否存在具有该ID的对象。
var el = checkedItems.filter(function(el) {
return el.Id === node.Id;
});
if (el.length) {
el[0].IsChecked = node.checked;
} else {
// push a new object
}
答案 1 :(得分:1)
您可以使用一个保证具有唯一键的对象:
var checkedItems = {};
onItemChecked : function (e) {
var node = e.sender.dataItem(e.node);
checkedItems[node.Id] = node.checked;
},
答案 2 :(得分:1)
你有一个id,它可以用于唯一性。因此,阵列可能不是最适合您想要完成的任务。有更好的方法来处理它只是普通的对象(见Mike McCaughan answer)和Map
var items = new Map
items.set(node.Id, node.checked)
// Removing items is as easy as
items.remove(node.Id)
// Getting
var checked = items.get(node.Id)
// Then if you want to iterate over them you would do something like:
for (var [key, value] of items.entries()) {
console.log(key + " = " + value)
}
var values = items.values()
var keys = items.keys()
地图就像一个键/值存储,就像对象
一样