jQuery:只从数组中打印一个结果

时间:2015-10-30 15:48:46

标签: javascript jquery arrays

我在json中有一组数组如下:

{"status":200,"success":true,"result":
[{"id":"0","NameInData":"","name":"","type":"mf","greeting":"Bonjour","message":"GENERIC: Lorem ipsum."},
{"id":"1","NameInData":"alexis","name":"Alexis","type":"mf","greeting":"Bonjour Alexis","message":"ONE: Lorem ipsum."},
{"id":"2","NameInData":"laurence","name":"Laurence","type":"ff","greeting":"Hello Laurence","message":"TWO: Lorem ipsum."},
{"id":"3","NameInData":"francois","name":"Francois","type":"mm","greeting":"Konnichiwa Francois","message":"THREE: Lorem ipsum."},
{"id":"4","NameInData":"dirk","name":"Dirk","type":"mf","greeting":"Ni hao Dirk","message":"FOUR: Lorem ipsum."},
{"id":"5","NameInData":"coline","name":"Coline","type":"ff","greeting":"high 5! Coline","message":"FIVE: Lorem ipsum."}]}

我能够从这个数组中识别一个键的值,并使用以下代码识别//do something

$.each(json.result, function(){
    if (this.name == content){
        //do something
        var identifiedID =  this.id;
        console.log("PRINT ID: " + identifiedID);

        var name = json.result[identifiedID].name;                  
        var $nameText = $("#nameText"),
            str = name;
            html = $.parseHTML(str),
            nodeNames = [];
            $nameText.append(html);
        console.log("Name: " + name);
    } else {
        var identifiedID = 0;
        console.log("PRINT ID: " + identifiedID);   

        var name = content;                 
        var $nameText = $("#nameText"),
            str = name;
            html = $.parseHTML(str),
            nodeNames = [];
            $nameText.append(html);
        console.log("Name: " + name);
});

如果使用以下代码在列表中未标识//do other things,我正在尝试name。但是,由于我的数组有6个项目,输出将重复整个过程6次,其中我只需要一个输出,一个结果(或者,一个名称及其ID已被识别并打印它与OR相关的内容name尚未被识别,id将被设置为0并打印它的相关内容。)

您可以在链接here中找到我的完整代码。 如果有人能告诉我我的语法哪部分是错的,那将是非常好的吗?

4 个答案:

答案 0 :(得分:1)

您可以使用Array.prototype.find查找匹配条件的第一个元素(即name == content),如果没有找到,则默认为json.result的第一个元素(假设为json.result[0] }始终是默认情况。)

var item = json.result.find(function(e) {
    return e.name == content;
}) || json.result[0];

console.log("PRINT ID: " + item.id);

var name = item.name || content;                  
var $nameText = $("#nameText"),
    str = name;
    html = $.parseHTML(str),
    nodeNames = [];
    $nameText.append(html);
console.log("Name: " + name);

请注意,此代码假设name != ""为您要查找的非默认项目。

我不确定您使用nodeNames做了什么,但如果您只是尝试将#nameText的文字设置为名称,则只需使用$('#nameText').text(name); < / p>

答案 1 :(得分:1)

一旦满足条件,你就可以退出if语句中的每个函数。

return false;

答案 2 :(得分:1)

在JSFiddle代码中,您应该使用$ .grep()而不是$ .each()来过滤掉符合条件的项目,即名称。 $ .grep()返回匹配元素的数组。因此,您可以检查数组的长度是否大于0.如果是,则找到匹配项。如果没有,则没有匹配的元素。

检查http://api.jquery.com/jQuery.grep/

答案 3 :(得分:0)

回答这个问题我会说语法看起来正确......