2017-01-10 82 views
0

之前我一直在檢查這個帖子:How can I find matching values in two arrays? 但它沒有幫助我。我真的不明白。所以,如果我在這裏解釋我的問題,那麼有人可以幫助我解決它。在JavaScript數組中匹配值

我有一個學校項目(我應該匹配用戶有關他們的位置,標籤,流行樂譜等 在使用兩個位置的算法之前,我想要一個第一個非精確排序,所以基本上我想比較兩個值,如「巴黎」和「巴黎」)

我的搜索函數返回我有兩個{}內的[],所以有關於符合我的第一個搜索值的兩個人(性別)

我使用Node.js,我的數據庫是MySQL,並且我的功能目前使用回調和承諾。

所以這是我的第一個對象(它包含我的搜索者的信息)

[ RowDataPacket { 
id: 34, 
username: 'natedogg', 
latitude: 48.8835, 
longitude: 2.3219, 
country: 'France', 
city: 'Paris', 
zipcode: 75017 } ] 

這是第二個(包含2個用戶)

[ RowDataPacket { 
id: 33, 
username: 'pablito', 
latitude: 48.8921, 
longitude: 2.31922, 
country: 'France', 
city: 'Paris', 
zipcode: 75017 }, 
RowDataPacket { 
id: 35, 
username: 'tupac', 
latitude: 48.8534, 
longitude: 2.3488, 
country: 'France', 
city: 'levallois', 
zipcode: 92300 } ] 

無我有這個數據怎麼能我檢查我的搜索者的位置是否是我的otherUsersLocation(即使它們超過1個位置) 感謝您的幫助!

+0

我試過'firstArray [0] ==。市secondArray [0] .city.'但在這裏我有thwo。城市的第二個數組,所以它會匹配第一個但不是第二個。 – pkerckho

+0

@Cruiser我也嘗試瞭解決方案,但它不起作用。我做了 'for(city in potentialsLocation){ for(cities in searcherLoc){ if(cities === searcherLoc [0]。[city]){ console.log(「working?」); } } }' }我修改了數據庫中的值,所以它應該可以工作,但是我不能記錄任何內容 – pkerckho

回答

1

這聽起來像你基本上想要比較你的第一個對象(你的搜索數據)和第二個數組(你的用戶數據)中的對象。您不一定需要直接比較兩個數組,因爲您的數據比字符串或數字更復雜。

爲了比較普通的JavaScript我會做這樣的事情的對象:

// loop through each object in user array 
for (object in secondArray) { 

    // loop through each property in the user object 
    for (property in object) { 

     // compare the property of user object with corresponding search object property 
     if (property === firstArray[0][property]) { 
      // do something 
     } 
    } 
} 
+0

嗨,謝謝你的回答,我試過了,但是它返回一個錯誤:firstArray [0]。[property],意外的標記['我真的不知道爲什麼 – pkerckho

+0

@pkerckho我編輯了我的答案。我需要說'firstArray [0] [property]'而不是'firstArray [0]。[property]'。希望它現在可以工作!當我在瀏覽器控制檯中設置它時,它確實適合我! –

+1

@Tomas Juranek,我是這樣解決的:'if(SecondArray){console.log(SecondArray.length); SecondArray.forEach(函數(元件){ 如果(firstArray [0]。市=== element.city){ 的console.log(「元件); } }) }' 我也將嘗試你想法,謝謝你的幫助! – pkerckho

0

我曾經爲你一些代碼,那工作,你應該能夠將它應用到你的情況。基本上,我們只是循環瀏覽想要搜索的對象並查看「城市」屬性。我重新命名了一些變量,以使得事情更清晰。

var data = { 
    id: 34, 
    username: 'natedogg', 
    latitude: 48.8835, 
    longitude: 2.3219, 
    country: 'France', 
    city: 'Paris', 
    zipcode: 75017 
}; 

var searchable = [{ 
    id: 33, 
    username: 'pablito', 
    latitude: 48.8921, 
    longitude: 2.31922, 
    country: 'France', 
    city: 'Paris', 
    zipcode: 75017 }, 
    { 
    id: 35, 
    username: 'tupac', 
    latitude: 48.8534, 
    longitude: 2.3488, 
    country: 'France', 
    city: 'levallois', 
    zipcode: 92300 
}]; 

// this array is just to save obj when we have a match 
var found =[]; 
// loop through each element in our searchable array 
for(var i=0;i<searchable.length;++i){ 
    if(data["city"] == searchable[i]["city"]){ 
     // did we find it? push it onto the found array 
     console.log("found: " + searchable[i]["city"]); 
     found.push(searchable[i]["username"]);} 
} 
// look to see if we got what we wanted 
console.log(found); 

您可以按照相同的步驟來匹配數據中的任何內容。

+0

謝謝!這就是我正在尋找的!我今天下午用我剛剛發佈的解決方案解決了我的問題,但我會記住你的想法,因爲我會再次使用這個想法 – pkerckho

+0

嘿!我只是想告訴你,你的想法運作良好。謝謝你的幫助。我今天做了類似的事情,但它不起作用,基本上它是一樣的想法,我想找到一些匹配的價值在兩個數組之間,但我無法正確地循環我的數組值。如果你可以幫我介紹一下這個t會很棒! – pkerckho

0

這是我設法找到我的陣列中的匹配值 if (SecondArray){ // console.log(SecondArray.length); SecondArray.forEach(function(element) { if (firstArray[0].city === element.city) { console.log("element); } }) }