检查数组中对象的属性

时间:2015-06-25 08:40:52

标签: jquery object

在JavaScript中,如何编写检查数据数组中是否存在值的方法的最佳方法是什么?

以下是我目前的情况:

var html = [];

html.push({
    key: "/1/1.html", 
    value:  "html 1 data"
});

if(doesKeyExist(html, "/1/1.html"))
{
    alert(getValue(html, "/1/1.html"));
}

function doesKeyExist(arr, key)
{
    $.each(arr, function (index, data) {
        if(data.key === key)
            return true;
    });
    return false;
}

function getValue(arr, key)
{
    $.each(arr, function (index, data) {
        if(data.key === key)
            return data.value;
    });
}

以上代码不会提示“html 1 data”的值,并且控制台中不会显示错误。

我可以请求上面的代码吗?

由于

3 个答案:

答案 0 :(得分:1)

问题是因为return块中的$.each语句是从doesKeyExist()getValue()函数中的匿名函数而不是返回的。你需要稍微改变你的逻辑:



var html = [];

html.push({
    key: "/1/1.html",
    value: "html 1 data"
});

if (doesKeyExist(html, "/1/1.html")) {
    alert(getValue(html, "/1/1.html"));
}

function doesKeyExist(arr, key) {
    var result = false;
    $.each(arr, function (index, data) {
        if (data.key === key) {
            result = true;
            return; // stop the loop
        }
    });
    return result;
}

function getValue(arr, key) {
    var result = '';
    $.each(arr, function (index, data) {
        if (data.key === key) {
            result = data.value;
            return; // stop the loop
        }
    });
    return result;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

问题是因为你在每个匿名函数范围内返回一个值,这不会将值返回给函数,所以它总是返回false。

所以你可以使用一个函数变量并将其返回。

代码:

var html = [];

html.push({
    key: "/1/1.html", 
    value:  "html 1 data"
});

html.push({
    key: "/1/2.html", 
    value:  "html 2 data"
});

if(doesKeyExist(html, "/1/1.html"))
{
    alert(getValue(html, "/1/1.html"));
}

function doesKeyExist(arr, key)
{
    var exist= false;

    $.each(arr, function (index, data) {
        if(data.key === key) {
            exist=true;      
            return false;
        }
    });
    return exist;
}

function getValue(arr, key)
{
    var value= '';

    $.each(arr, function (index, data) {
        if(data.key === key) {
            value=data.value;      
            return false;
        }
    });
    return value;
}

演示:http://jsfiddle.net/IrvinDominin/v989gmxc/2/

答案 2 :(得分:0)

你说你只是想检查数组中是否存在值,请检查http://jsfiddle.net/elviz/nrfm943e/

     var html = [];

        html.push({
           key: "/1/1.html", 
           value:  "html 1 data"
         });

      $.each(html, function (index, data) {
        if(data.value){
            alert(data.value);
          }

         });