【问题标题】:javascript searching a json objectjavascript 搜索一个 json 对象
【发布时间】:2015-05-12 00:03:36
【问题描述】:

我正在尝试在 json 中搜索一个值

<input type="text" id="test" size="21" maxlength="120">
<button onclick="Zoek()" class="btn btn-info btn-block">
        tijdelijke zoek knop
</button>

我用它来输入一个值和按钮来调用搜索功能

function Zoek() {
    var qeustion = document.getElementById("test").value;
    document.getElementById("accordion").innerHTML == "";
    var text = '{ "FAQ" : [' +
        '{ "vraag":"John" , "antwoord":"Doe" },' +
        '{ "vraag":"Anna" , "antwoord":"Smith" },' +
        '{ "vraag":"Peter" , "antwoord":"Jones" } ]}';

    obj = JSON.parse(text);

    for (i = 0; i < text.length; i++) {
        if (obj.FAQ[i].vraag == qeustion) //(obj.FAQ[i].getString("vraag").contains(question))
        {
            document.getElementById("accordion").innerHTML += "<div class='panel panel-default'><div class='panel-heading' role='tab' id='heading" + i + "'><h4 class='panel-title'><a data-toggle='collapse' data-parent='#accordion' href='#" + i + "' aria-expanded='false' aria-controls='" + i + "''>" + obj.FAQ[i].vraag + " </a></h4></div><div id='" + i + "' class='panel-collapse collapse in' role='tabpanel' aria-labelledby='heading" + i + "'><div class='panel-body'> " + obj.FAQ[i].antwoord + "</div></div></div> WOWOWOWOWOWOWOWOWWOWOWOOW";
        } else {
            document.getElementById("accordion").innerHTML = "No results found"
        }
    }
}

这是我的搜索功能

假设我输入 John,它直接进入 else 并且不执行 if 语句,即使我很确定它是正确的

谁能给我一些关于在 json 对象中搜索的指示?还有其他方法吗?

【问题讨论】:

  • 下面的答案和 jsfiddle 向您展示您所追求的。你能确认这是你想要的吗?问题是没有break 声明

标签: javascript json search


【解决方案1】:

请参阅附件jsfiddle,展示您正在寻找的内容,并将向您展示您需要做什么 - https://jsfiddle.net/vuenume2/1/

在循环中必须有一个break 语句。

如果没有 break 语句,您成功的真实值只会在下一次迭代中被 false 覆盖,除了最后可能的凭据,没有“下一次”迭代。

if (obj.FAQ[i].vraag == qeustion)
        {
           <!-- do stuff -->
            break;
        } else {
             <!-- do other stuff -->
        }

另外,如果你还没有这样做,你需要在你的 html 中添加一个 ID 为 accordion 的 div

<div id="accordion"></div>

【讨论】:

  • 哦,顺便说一句,如果你不介意我问的话。有没有一个选项可以做我所拥有的,但像包含这样的东西。所以就像如果我输入一个's',它会给我所有带有s的选项?
【解决方案2】:

使用过滤功能。您在 obj 中将该字符串解析为 json,因此您可以这样做:

var target = obj.FAQ.filter(function(element){ return element.vraag == qeustion})[0];
if(target == undefined) { 
  // there is no that object logic 
} else {
  // there is that object logic
}

【讨论】:

    猜你喜欢
    • 2012-05-27
    • 1970-01-01
    • 2014-04-08
    • 2018-05-05
    • 1970-01-01
    • 2016-11-11
    • 2018-09-07
    • 2011-10-02
    • 2017-07-04
    相关资源
    最近更新 更多