2012-12-02 106 views
1

我正在嘗試查找巨型數組(7000+項)的結果,由於某種原因,之前用於另一個項目的腳本一直返回false,或者我可能會忘記某些內容。通過數組查找項目

我想排序通過一個數組,並找到兩個項目在變量中列出。這裏的代碼:

$.getJSON('proxy.php?url=http://api.bukget.org/api/plugins', function(data){ 
     var list = ['essentials', 'worldguard']; 
     //console.log(data); 
     $.each(data, function(i, plugin){ 
      if (plugin === list) { 
       console.log('found!'); 
       } else { 
        return false; 
       } 
     }); 

    }); 

我從我的代碼中缺少什麼?

使用代理:

<?php 

    if (!isset($_GET['url'])) die(); 
    $url = urldecode($_GET['url']); 
    $url = 'http://' . str_replace('http://', '', $url); // Avoid accessing the file system 
    echo file_get_contents($url); 
?> 

這使得數據(摘錄):

["a5h73y", "ab-marriage", "abacus", "abag", "abandonedcarts", "abilitytrader", "abitofrealism", "aboot", "absorbchests", "acc", "acceptdarules", "acceptrules", "accesscontrol", "accessories", "accident-tnt", "accountlock", "achat", "achievement", "achievements", "acientcave", "acommands", "actionzones", "activator", "activityhistory", "activitypromotion", "activitytracker"] 
+0

刪除整個'else'塊。 – ahren

+0

你可以發佈'數據'的結構嗎?它似乎是一個對象,因爲你使用'$ .getJSON',但你說它是一個數組,所以它有點混亂。 –

回答

7

return false將在第一次迭代如果plugin !== list擺脫$.each的。

編輯:如果你想找到任何內部list項目,並停止匹配它會是:

$.getJSON('proxy.php?url=http://api.bukget.org/api/plugins', function(data) { 
    var list = ['essentials', 'worldguard'], 
     found; 
    $.each(data, function(i, plugin) { 
     if (~$.inArray(plugin, list)) { 
      found = true; 
      return false; 
     } 
    }); 
    if (found) { 
     console.log('found!'); 
    } else { 
     console.log('not found!'); 
    } 
}); 

Fiddle

如果你想找到他們兩個:

$.getJSON('proxy.php?url=http://api.bukget.org/api/plugins', function(data) { 
    var list = ['essentials', 'worldguard'], 
     found = 0; 
    $.each(data, function(i, plugin) { 
     if (~$.inArray(plugin, list)) { 
      found++; 
     } 
    }); 
    if (found === list.length) { 
     console.log('found all of them!'); 
    } else { 
     console.log(found + ' items found.'); 
    } 
}); 

Fiddle

+0

我正在使用您的確切腳本(複製意大利麪),它沒有找到! – devs

+0

好的,粘貼它。 – devs

+0

你粘貼的'data'是來自'$ .getJSON'裏面的?從你的console.log(數據)檢查你正在尋找的物品是否真的存在。 –

3

除了另一個答案,數組文字不能可靠地與==進行比較。使用.indexOf

if (list.indexOf(plugin) > -1) { 

} 
+0

'plugin'是JSON對象的屬性值。你如何將這個應用於OP的案例? –

+0

他是對的。這是一個字符串。 Fab和你的是對的,謝謝! – devs

2

plugin數組或一個字符串?如果它是一個數組,數組的比較是不可用在Javascript中(例如:http://jsfiddle.net/F36Qd/

如果plugin是一個字符串,在這裏是要知道,如果它在list方式:

if (list.indexOf(plugin) > -1) { 
    // Found 
} 

如果plugin是一個數組您必須編寫一個可以進行深度對象比較的函數。