使用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/

10-12 12:39
查看更多