1

我正在尝试查找一个巨大数组(7000 多个项目)的结果,出于某种原因,我之前用于另一个项目的脚本一直返回错误,或者我可能忘记了一些东西。

我正在尝试对数组进行排序并找到变量中列出的两个项目。这是代码:

$.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"]
4

3 回答 3

7

return false将在第一次迭代中突破$.eachif 。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!');
    }
});

小提琴

如果你想同时找到它们:

$.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.');
    }
});

小提琴

于 2012-12-02T00:35:30.280 回答
3

除了其他答案之外,数组文字不能可靠地与==. 使用.indexOf

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

}
于 2012-12-02T00:37:57.873 回答
2

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

如果plugin是一个字符串,这是知道它是否在的方法list

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

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

于 2012-12-02T00:39:55.317 回答