1

巨大な配列 (7000 以上の項目) の結果を見つけようとしていますが、何らかの理由で、以前に別のプロジェクトで使用したスクリプトが false を返すか、何かを忘れている可能性があります。

配列を並べ替えて、変数にリストされている 2 つの項目を見つけようとしています。コードは次のとおりです。

$.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 に答える