我试图找到一个巨大的数组(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 :(得分: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!');
}
});
如果你想找到它们两个:
$.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.');
}
});
答案 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
是一个数组,那么你必须编写一个能够进行深度对象比较的函数。