在Parse.com JS SDK中,如何从指针数组中删除一个元素?

时间:2016-01-29 02:36:49

标签: javascript arrays parse-platform

不是要求Parse.com问题的最佳时刻,但我必须继续使用解析器几个月。这是我的问题:

在Parse.com中,我使用的是Javascript SDK。 我有一个数组指向类User的指针:

[{userObject1.id}, {userObject2.id}, {userObject3.id}]

当我只有要删除的对象的id时,如何从数组中删除对象{userObject2}?

目前我通过使用array.splice(indexDelete,1);执行 forEach 循环来删除内部对象。我正在寻找更好的解决方案。

var wasSomethingDeleted = 0;
var MyParseFollow = Parse.Object.extend('Follow');
var query = new Parse.Query(MyParseFollow);
query.equalTo("user", channelUser); // fetch all followers
query.first().then(
    function (Follow) {
        if (Follow){
            if (Follow.get("followedBy").length > 0){ // check if there is any follower
                var listOfFollowers = Follow.get("followedBy"); // get the array of userObjects of followers
                var indexDelete = 0;
                listOfFollowers.forEach(function(user){
                    if( user.id == Parse.User.current().id ){ // I want to remove the current authenticated user
                        wasSomethingDeleted++;
                        listOfFollowers.splice(indexDelete, 1); // remove the element
                    }else{
                        indexDelete++;
                    }
                });
                if( wasSomethingDeleted > 0 ){
                    Follow.set('followedBy', listOfFollowers); // save new updated array list of followers
                    Follow.save();
                }
            }
        }
    }
);

4 个答案:

答案 0 :(得分:0)

这应该做..使用2查询用户和你的类,以便从数组中只删除一个用户对象。

您可以进行测试,然后进行调整,以便在关注者列表中添加“forEach”。您可以在关注者上执行forEach循环,将每个用户对象提取到一个用户数组,然后在整个数组上调用remove,一步一步将它们从MPFollow.followedBy数组中删除。

        var qu = new Parse.Query(Parse.User);
        var _user; 
        var folRequest = Parse.Object.extend("MPFollow");
        var qcr = new Parse.Query(folRequest);

        qu.get(userId).then(function(user) {
          if (typeof user === "undefined") {
            return Parse.Promise.error("DNF user to remove");
          } else{
             _user = user;
            return qcr.get(MPFollowId);
          }
        }).then(function(mpf){

          _mpf = mpf;
          _mpf.remove("followedBy", _user);
            console.log('ChnReq UP rm user : ' + _chan.id + ' ' +      _user.id);
          return _mpf.save();
}).then(function(){
          console.log('remov prcss complete');

        },function(e) {
          console.log('ERR ' + e.code + ' ' +e.message);
        });

答案 1 :(得分:0)

建议:我认为您要从列表中删除当前登录用户,或者如果要从列表中删除任何用户。那么为什么你从服务器上获取它然后删除它,你可以像

一样使用它
query.whereNotEqualTo("objectId", user.id);

这将有助于您删除任何不需要的用户。

答案 2 :(得分:0)

根据Parse js guide的文档。试试这个

var wasSomethingDeleted = 0;
var MyParseFollow = Parse.Object.extend('Follow');
var query = new Parse.Query(MyParseFollow);
query.equalTo("user", channelUser); // fetch all followers
query.first().then(
    function (Follow) {
        if (Follow){
            if (Follow.get("followedBy").length > 0){ // check if there is any follower
                    Follow.remove('followedBy', {Parse.User.current().id}); //remove all instances of the current user from followedBy field.
                    Follow.save();
            }
        }
    }
);

答案 3 :(得分:-1)

我相信这应该有效

 var User = Parse.Object.extend("User");
 var user = new User();
 user.id = "UserID1";
 user.destroy().then(console.log.bind(console))

 var user = User.createWithoutData("UserID1"); 
 user.destroy().then(console.log.bind(console))

由于您有多个用户ID,因此您可能需要使用Parse.Object.destroyAll方法