检查 javascript 数组中的对象是否被切除
Check if object excists in javascript array
我正在尝试创建一个具有唯一对象的数组。我有一个 json 数据,我想按池排序。每个匹配都有自己的池数据,因此他会将每个匹配的池数据推送到数组。这将创建一个包含 5 个相同池值的数组。这是我的代码:
var arr = [];
for (var i = 0; i < data.objects.length; i++){
obj = {
poolId: data.objects[i].pool.id,
poolLetter: data.objects[i].pool.name
};
if (arr.indexOf(obj) == -1) {
arr.push(obj);
}else{}
}
问题是你在循环中生成的obj
不会是arr
数组中的同一对象,它们会有不同的签名,所以你不能在这种情况下使用indexOf
。
相反,您必须遍历 arr
数组以查看是否可以找到具有相同poolId
或poolLetter
的任何元素:
var arr = [];
for (var i = 0; i < data.objects.length; i++){
obj = {
poolId: data.objects[i].pool.id,
poolLetter: data.objects[i].pool.name
};
// Do the insert if arr doesn't already contain this poolId
if(!arrayContains(arr, obj.poolId)) arr.push(obj);
}
// Helper function to find an instance of poolId in the given array
function arrayContains(arr, poolId) {
for(var x = 0; x < arr.length; x++) {
if(arr[x].poolId === poolId) {
return true;
}
}
return false;
}
这是一个小提琴,它演示了上述内容。
indexOf 使用严格相等(与 === 或三等运算符使用的方法相同)将 searchElement 与数组元素进行比较。
然后
var obj1 = { a:1};
var obj2 = { a:1};
obj1 === obj2; // wrong
当你写"var obj1={a:1}"时,javascript会创建一个新对象。
您可以使用数组原型。只需传递对象即可。
Array.prototype.contains = function(obj) {
var i = this.length;
while (i--) {
if (this[i] === obj) {
return true;
}
}
return false;
}
使用以下方法
alert([1, 2, 3].contains(2)); //true
alert([1, 2, 3].contains('2')); //false
还有一个jQuery解决方案。我知道你没有要求jQuery答案。但也许你想使用它。
jQuery.inArray() 返回指定值的索引,如果未找到,则返回 -1。
http://api.jquery.com/jQuery.inArray/
相关文章:
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- 遍历 JSON 对象并检查 URL 是否以某个值结尾
- 验证会话中是否存在对象's数组
- JS数组-检查对象值是否重复
- 如何检查数组中的对象是否等于选项值
- IndexedDB对象键:大小是否重要
- 测试对象是否相等和/或对象是否有更多的关键点,但仍然与共同的关键点相等
- 确定javascript中的html表对象是否具有<colgroup>是否
- 验证对象是否为null Javascript/Angularjs
- 使用js/jQuery检查对象(而不是元素)是否真的存在
- 确定var是否是javascript中的elementFinder对象的方法是什么
- 如何通过json对象选项卡中的Id来检查对象是否存在
- 是否可以在javascript中反序列化java对象
- 尝试简化检查对象键是否为true并将其推送到另一个对象
- jQuery-检测选择对象是否添加或删除了选项
- 将对象从另一个不可变的Map分配给Map是否意味着深度克隆
- 查找对象数组是否包含其中一个标记的最快方法
- 检查对象是否是mongo游标
- 检查对象的所有属性是否未定义
- JavaScript对象作为哈希?复杂性是否大于O(1)