这基本上是没有逻辑意义的东西,我不确定为什么会发生这种情况。
当您创建一个函数来比较对象数组(基本上是JSON对象)的属性值时,它拒绝查找索引。但是,OUTSIDE的功能,似乎完美无缺。
然而,问题是
var peoples = [
{ "name": 44, "dinner": "pizza" },
{ "name": 65, "dinner": "sushi" },
{ "name": 33, "dinner": "hummus" }
];
var val = 33;
$("#t").append(get_index_of_array_based_on_value(peoples, val));
function get_index_of_array_based_on_value(array, val) {
$.each(array, function (index, obj) {
$.each(obj, function (attr, value) {
console.log(" attr: " + attr + " == " + value + " (" + val + ") {{" + index + "}} ");
if (value == val) {
return index;
}
});
});
}
http://jsfiddle.net/QStkd/2327/
以上不起作用。
以下脚本确实有效。
http://jsfiddle.net/QStkd/2330/
除了函数外,下面的脚本只是相同的脚本。当你把东西放入函数时,它突然拒绝根据值找到索引。
答案 0 :(得分:3)
您无法从$.each
电话中返回值。你在回调中,你的return
不影响主要功能。
在return
回调中使用$.each
时,它与break
/ continue
循环中的for
/ while
类似。假值会破坏循环,而真正的值就像调用continue
。
您需要从主函数get_index_of_array_based_on_value
返回,而不是从$.each
返回。
function get_index_of_array_based_on_value(array, val) {
var returnVal = null;
$.each(array, function (index, obj) {
$.each(obj, function (attr, value) {
console.log(" attr: " + attr + " == " + value + " (" + val + ") {{" + index + "}} ");
if (value == val) {
returnVal = index;
return false; // break;
}
});
if(returnVal !== null){
return false; // break the outer loop
}
});
return returnVal;
}
答案 1 :(得分:1)
你的这个
var peoples = [
{ "name": 44, "dinner": "pizza" },
{ "name": 65, "dinner": "sushi" },
{ "name": 33, "dinner": "hummus" }
];
var val = 33;
$("#t").append(get_index_of_array_based_on_value(peoples, val));
function get_index_of_array_based_on_value(array, val) {
for(var index = 0; index < array.length; index++){
for(var attr in array[index]) {
var value = array[index][attr];
console.log(" attr: " + attr + " == " + value + " (" + val + ") {{" + index + "}} ");
if (value == val) {
return index;
}
}
}
}