2015-03-24 116 views
0

所以基本上我有一些承諾,forEach,只是我需要解決這個單一問題的很多問題。所以我一起工作的變量具有如下結構:需要幫助比較陣列中的值,forEach循環

persons = [object, object, object] 
where each object has { user:number , username: string, latitude:number, longitude:number} 

從那裏我試圖找出如果我的用戶/用戶名是其中的一個對象的內部,如果沒有找到ID喜歡創建它,如果發現發現編號喜歡它來更新他們的位置。聽起來很簡單,我認爲這個問題已經不成比例,但沒有任何效果。我現在所擁有的代碼無法使用,無論我何時無法知道用戶何時不在,或者我無法知道如何在每次找到不是我的用戶時停止創建我。

var getswamp = function(item, index) { 
    return new Promise(function(resolve, reject){ 
    var result = false; 
    if (item.user === user && item.username === username) { 
     if ((item.latitude !== latitudenew) || (item.longitude !== longitudenew)) { 
     var id = item.id; 
     swampdragon.update('locationcurrent', { 
      user: user, 
      latitude: latitudenew, 
      longititude: longitudenew, 
      username: username, 
      id: id 
     }, function (context, data) { 
      console.log("data updated", data); 
      result = true; 
      resolve(result); 
     }, function (context, data) { 
      console.log("You may not be updated"); 
     }); 
     } else { 
     console.log("No location change"); 
     result = true; 
     } 
    }else{ 
     if (item.index === person.index){ 
     console.log(person); 
     resolve(result) 
     } 
    } 
    }); 
}; 

person.forEach(function (item, index) { 
    var swamping = getswamp(item, index); 
    swamping.then(function (result) { 
    console.log(result); 
    if (result === true) { 
     console.log("We have you"); 

    } else if (result === false && (index === person.length - 1)) { 
     console.log('Index: ' + index + ' Length of list is ' + person.length); 
     swampdragon.create('locationcurrent', { 
     user: user, 
     latitude: latitudenew, 
     longititude: longitudenew, 
     username: username 
     }, function (context, data) { 
     console.log("data created", data); 
     }, function (context, data) { 
     console.log("You may not be created") 
     }); 
    } 
    }) 
}); 

任何幫助/想法都會很棒。

+1

,什麼是問題? – MaxZoom 2015-03-24 21:41:00

+0

我如何基本解決這個問題,我使用的東西不是forEach循環,沒有任何提示?我有我很想重構工作的代碼,但我會接受任何想法,以更好地解決實際工作的問題。 – 2015-03-24 21:43:07

+0

因此,您需要向現有的用戶集合添加新用戶,如果用戶不在該集合中? – MaxZoom 2015-03-24 22:04:41

回答

0

Promise用於某些異步事件發生時。 既然不能創造這樣的情況下,我做了如下一種靜態代碼:

var persons = new Array(); 
 

 
persons.indexOf = function(person) { 
 
    var index = -1; 
 
    this.forEach(function(obj, i) { 
 
    if (person.username == obj.username) { 
 
     index = i; 
 
    } 
 
    }); 
 
    return index; 
 
} 
 
     
 
persons.addOrUpdate = function(person) { 
 
    var index = this.indexOf(person); 
 
    if (index == -1) { 
 
    person.user = this.length + 1; 
 
    this.push(person); 
 
    } 
 
    else { // update case 
 
    var obj = this[index]; 
 
    obj.latitude = person.latitude; 
 
    obj.longitude = person.longitude; 
 
    } 
 
} 
 
     
 
persons.print = function() { 
 
    var str = ""; 
 
    this.forEach(function(obj) { 
 
    str += obj.user + ". " + obj.username + " at location (" + 
 
     obj.latitude + ":" + obj.longitude + ")\n"; 
 
    }); 
 
    return str; 
 
} 
 
     
 
persons.addOrUpdate({username:'Adam', latitude:-0.0045, longitude:14.2015}); 
 
persons.addOrUpdate({username:'Eve', latitude:-0.0045, longitude:14.2015}); 
 
persons.addOrUpdate({username:'Abel', latitude:-0.0045, longitude:14.2015}); 
 
// Updating Able location 
 
var person = {username:'Abel', latitude:10.1145, longitude:14.1234}; 
 
persons.addOrUpdate(person); 
 

 
alert(persons.print());