通过数组查找项目

时间:2012-12-02 00:33:38

标签: javascript jquery

我试图找到一个巨大的数组(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"]

3 个答案:

答案 0 :(得分:7)

return false将在第一次迭代中突破$.each if plugin !== list

修改:如果您要查找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

答案 1 :(得分:3)

除了另一个答案,数组文字无法与==进行可靠的比较。使用.indexOf

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

}

答案 2 :(得分:2)

plugin是数组还是字符串?如果它是一个数组,则Javascript中不提供数组比较(例如:http://jsfiddle.net/F36Qd/

如果plugin是一个字符串,可以通过以下方式了解它是否在list中:

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

如果plugin是一个数组,那么你必须编写一个能够进行深度对象比较的函数。