首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查javascript数组中的对象清除器是否

检查javascript数组中的对象清除器是否
EN

Stack Overflow用户
提问于 2013-10-25 12:18:17
回答 4查看 119关注 0票数 0

我正在尝试创建一个具有独特对象的数组。我有一份我想按池订购的json数据。每个匹配都有自己的池数据,因此他将把每个匹配的池数据推到数组中。这将创建一个由5个相同池值组成的数组。这是我的密码:

代码语言:javascript
复制
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{} 
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-25 12:24:23

问题是,在循环中生成的obj将不是arr数组中的同一个对象,它们将具有不同的签名,因此不能在此实例中使用indexOf

相反,您必须遍历arr数组,以查看是否可以找到具有相同poolIdpoolLetter的任何元素。

代码语言:javascript
复制
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;
}

下面是一个小提琴,它演示了上面的内容。

票数 1
EN

Stack Overflow用户

发布于 2013-10-25 12:28:49

您可以使用阵列原型。把物体传过来。

代码语言:javascript
复制
Array.prototype.contains = function(obj) {
var i = this.length;
while (i--) {
    if (this[i] === obj) {
        return true;
    }
}
return false;
}

请使用以下内容

代码语言:javascript
复制
alert([1, 2, 3].contains(2)); //true
alert([1, 2, 3].contains('2')); //false
票数 0
EN

Stack Overflow用户

发布于 2013-10-25 12:36:10

indexOf使用严格相等的方法将searchElement与数组的元素进行比较(与===或三元相等操作符使用的方法相同)。

然后

var obj1 = { a:1};

var obj2 = { a:1};

obj1 === obj2; // wrong

当您编写"var obj1={a:1}“时,javascript将创建一个新对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19589697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档