Javascript在对象数组中查找整数属性值

时间:2014-02-25 18:41:07

标签: javascript jquery json

这基本上是没有逻辑意义的东西,我不确定为什么会发生这种情况。

当您创建一个函数来比较对象数组(基本上是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/

除了函数外,下面的脚本只是相同的脚本。当你把东西放入函数时,它突然拒绝根据值找到索引。

2 个答案:

答案 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;
        }
    }
  }
}