使用parse.com和Javascript SDK。
更新-我创建了一个小提琴来显示问题http://jsfiddle.net/Dano007/j8vgqvqg/11/
下面的代码返回当前用户连接的朋友列表。然后,它将结果显示在选项下拉框中,供用户选择朋友。解析中有3条记录的状态为“已连接”,Chrome的检查元素中也显示了3条记录。
由于某种原因,当结果显示在下拉框中时,它们是重复的。
我需要同时包含toUser和fromUser,否则仅使用其中之一,您将只能获得1/2的朋友连接。
如何在下拉框中停止复制?一个有效的例子/答案会很棒!
![var currentUser = Parse.User.current();
var FriendRequest = Parse.Object.extend("FriendRequest");
var queryOne = new Parse.Query(FriendRequest);
queryOne.equalTo("toUser", currentUser);
var queryTwo = new Parse.Query(FriendRequest);
queryTwo.equalTo("fromUser", currentUser);
var mainQuery = Parse.Query.or(queryOne, queryTwo);
//mainQuery.include('toUser');
mainQuery.include('fromUser');
mainQuery.equalTo("status", "Connected");
mainQuery.find({
success: function(results) {
var friends = \[\];
for (var i = 0; i < results.length; i++) {
friends.push({
username: results\[i\].get('fromUser').get('username'),
userId: results\[i\].get('fromUser').id,
});
var select = document.getElementById("selectFriend");
$.each(friends, function(i, v) {
var opt = v.userId;
var optfrontend = v.username;
var el = document.createElement("option");
el.textContent = optfrontend;
el.value = opt;
select.appendChild(el);
})
}
},
error: function(error) {
alert("Error: " + error.code + " " + error.message);
}
});
的HTML
<option value="0">Select a friend</option>
最佳答案
您可以使用$.unique()从阵列中删除重复项:
friends = $.unique( friends );
未经测试,但也可以直接在$ .each中工作:
$.each($.unique(friends), function(i, v) { ...
更新:由于使用$ .unique()对
friends
数组不起作用,可能friends
由具有相同用户名但其他值不同的唯一条目组成-那么可以使用以下方法:var added = {};
$.each(friends, function(i, v) {
var opt = v.userId;
var optfrontend = v.username;
if(!added[optfrontend])
{
added[optfrontend]= true;
var el = document.createElement("option");
el.textContent = optfrontend;
el.value = opt;
select.appendChild(el);
}
});
演示Fiddle
通过在处理
added[optfrontend]
时检查$.each()
是否为true,这只会将用户名添加到以前未添加的选项中。附带说明-在使用jQuery时,您也可以使用
var select = $("#selectFriend");
代替
var select = document.getElementById("selectFriend");
但是那你就得改变
select.appendChild(el);
进入
select.append(el);
更新:当在全局范围内声明此方法中使用的
var added = {};
时,建议的方法有效,因此可以在each()
内部访问。如果在each()
上方声明它,但在OP代码的另一个函数内部声明它,则在each()
内部将它未定义。关于javascript - 如何停止在HTML选项下拉框中重复的查询结果?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26817595/