我有一个名为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?
答案 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');
哪个返回收藏集