在推入之前检查对象是否存在于数组中
Check if object exists in an array before pushing
我有一个空数组和一个可选择的树,每次当用户选中或取消选中一个节点时,我都会推送节点的id,以及复选框是真还是假。
但是现在如果用户选中一个节点然后取消选中那么在同一个节点的数组中将有两个对象我如何确保不会发生这种情况呢?
//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});
},
在推入新对象之前,可以检查是否存在具有该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
}
您可以使用一个对象,它保证有唯一的键:
var checkedItems = {};
onItemChecked : function (e) {
var node = e.sender.dataItem(e.node);
checkedItems[node.Id] = node.checked;
},
你有一个很好的Id,因为它可以用于惟一性。也许数组并不是最适合你的。有更好的方法来处理它,只是简单的对象(见Mike McCaughan的回答)和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()
Map就像键/值存储,很像对象
相关文章:
- 创建一个数组数组,没有任何重复的Javascript
- 获取最接近的数组数
- 数组数组jquery,json到数组
- 查找数组's按属性不存在于另一个数组中的对象
- 用null填充稀疏数组(类似于压缩两个数组)
- 尝试从计算创建数组时数组长度无效
- 在javascript中动态添加数组数组
- 数组数组:无限循环
- 循环访问 JS 数组 + 数组属性
- 将字符串拆分为具有固定字符数的数组
- 如何制作Javascript's减少对数组数组的方法工作
- 在数组数组中查找表数据存储
- 将 breeze 谓词应用于可观察数组中的数据
- 如何将css样式应用于动态JavaScript数组
- 对对应于另一个数组的数组的值求和
- 在没有jQuery的Javascript中,我要查找一个数组中的任何值是否存在于单独的数组中
- 我如何动态地添加到JavaScript对象类似于JavaScript的数组推送函数
- 试图找到如果一个数字存在于我的数组通过输入
- 用lodash检查数组是否存在于另一个数组中
- 如果数组中的所有项存在于另一个数组中,则删除它们