在javascript中迭代一组对象并从该函数返回true

时间:2013-03-07 21:52:36

标签: javascript arrays loops

我有一个名为collection的对象,我想测试一下justin是否是此集合的一部分。

collection = { 0:{screen_name:"justin"},1:{screen_name:"barry"}}

我正在尝试发现最有效的方法,将名称传递给名为present_user(user)的函数,以查看用户是否是该集合的一部分而且我有点难过。

所以我的集合是由对象0,1,n + 1组成的。我正在尝试迭代这个集合。到目前为止我只测试[0]

function present_user(user) {
  collection[0]["screen_name"] == user -> return true in the case of "justin"
}

如何迭代此集合的所有值,如果将user_name“justin”传递给函数,则返回true?

5 个答案:

答案 0 :(得分:11)

你的集合是一个对象,而不是一个数组,所以这是一种方法:

var present_user = function(user){
    for (var k in collection) {
        if (collection[k]['screen_name'] == user) return true;
    }
    return false;
};

答案 1 :(得分:7)

如果外部对象键都是数字,则应使用数组:

var collection = [{screen_name:"justin"}, {screen_name:"barry"}];

然后迭代:

function present_user(user) {
    for(var i=0; i < collection.length; i++) {
        if(collection[i].screen_name === user) return true;
    }
}

您也可以循环对象集合(使用for..in,请参阅mVChr's answer),但在这种情况下,您看起来确实应该使用数组。

答案 2 :(得分:0)

如果您事先知道集合中有多少个对象,可以使用添加length属性并使用

Array.prototype.some.call(collection, function (elem) {
    return elem.screen_name = 'justin';
});

理想情况下collection最初会是一个数组,所以你可以使用collection.some,但我知道这可能是不可能的。

如果在这种情况下无法提前知道长度,则必须手动迭代。遗憾。

var exists = false, i;
for (i in collection) {
    if (collection.hasOwnProperty(i)) {
        /* may also want to check `screen_name` property existence
        if (collection[i].screen_name == 'justin') {
            exists = true;
            break;
        }
    }
}

答案 3 :(得分:0)

 function any(user) {
    return collection.filter(function (item) { return item == user }).length > 0;
 }

这里唯一的“问题”是你需要一个数组而不是一个对象,如果你没有将收集变量修改为数组的问题,我认为这种功能方法将是最优雅的。

另外需要考虑的是,这段代码在找到第一个匹配时不会停止,它会测试数组中的所有项目,所以我建议只在数组不大的情况下使用它。 / p>

答案 4 :(得分:0)

您还可以将集合或对象转换为数组,以便可以使用数组方法进行迭代:

Object.values(collectionOrObject);

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values

当您使用本地javascript dom选择器(例如:

document.getElementsByClassName('someClass');

哪个返回收藏集