javascript - 使用 JQuery 从串联输入值的字符串中搜索并返回 JSON 文件值
问题描述
我正在寻找一些帮助来搜索一个 JSON 文件,该文件具有一个由串联的 4 个下拉列表值和一个静态值组成的变量。IE。
DL1 | DL2 | DL3 | DL4 |
1000 | 20 | 0.1 | 0.001 |
etc...
Minbudget Concat val to grab Minbudget
10% (0.1): 20000 1000_20_0.1_0.001_0.1
20% (0.2): 30000 1000_20_0.1_0.001_0.2
etc...
我目前正在输出百分比的串联,以查看该功能是否有效(它确实有效)。但我需要做的是使用它作为搜索变量从 JSON 文件中获取 Minbudget 值。
[
{
"concatenation": "200000_20_0.001_0.1",
"audience": 200000,
"cpic": 20,
"bcr": 0.001,
"control": 0.1,
"Minbudget": 20000
},
{
"concatenation": "200000_20_0.001_0.2",
"audience": 200000,
"cpic": 20,
"bcr": 0.001,
"control": 0.2,
"Minbudget": 20000
},
{
"concatenation": "200000_20_0.001_0.3",
"audience": 200000,
"cpic": 20,
"bcr": 0.001,
"control": 0.3,
"Minbudget": 20000
},
我从 JSON 文件中获取值以组成列表,但它们位于顶部的重复数据删除数组中。
我需要像我一样再次引用 getJSON 吗?
我已经写了我认为可能接近工作的内容,但任何帮助将不胜感激!
$.getJSON("https://raw.githubusercontent.com/annielawrencee/incrementalityform/master/power_calc.json", function(obj,tenperconcat) {
$.each(obj, function(key, value) {
if (value.concatenation == tenperconcat ) {
var tenperval = value.Minbudget;
$('#tenperbudget').val(tenperval)
}
});
});
解决方案
问题是因为您在“连接”中复制了最终值,因此它与您检索的对象数组中的值不匹配。
您需要删除该最终值,然后循环获取每个组合的 10-50% 值。
另请注意,您可以将检索到的对象存储在变量中以供以后参考,因为 AJAX 请求总是在页面加载后立即发出。试试这个:
$(document).ready(function() {
var data;
$.getJSON("https://raw.githubusercontent.com/annielawrencee/incrementalityform/master/power_calc.json", function(obj) {
data = obj;
var dupaudience = [];
var dupcpic = [];
var dupbcr = [];
var dupcontrol = [];
$.each(obj, function(key, value) {
if (dupaudience.indexOf(value.audience) == -1) {
$("#audience").append("<option value=" + key + ">" + value.audience + "</option>");
dupaudience.push(value.audience);
}
if (dupcpic.indexOf(value.cpic) == -1) {
$("#cpic").append("<option value=" + key + ">" + value.cpic + "</option>");
dupcpic.push(value.cpic);
}
if (dupbcr.indexOf(value.bcr) == -1) {
$("#bcr").append("<option value=" + key + ">" + value.bcr + "</option>");
dupbcr.push(value.bcr);
}
if (dupcontrol.indexOf(value.control) == -1) {
$("#control").append("<option value=" + key + ">" + value.control + "</option>");
dupcontrol.push(value.control);
}
});
});
var $outputs = $('.output');
$('#audience, #cpic, #bcr, #control').on('change', function(obj) {
var selectedAudience = $('#audience option:selected').text()
var selectedCpic = $('#cpic option:selected').text()
var selectedBcr = $('#bcr option:selected').text()
var selectedControl = $('#control option:selected').text()
var baseConcat = selectedAudience + "_" + selectedCpic + "_" + selectedBcr + "_0.";
for (var i = 1; i <= 6; i++) {
var entities = data.filter(o => o.concatenation === baseConcat + i);
if (entities.length != 1) {
console.log('0.' + i + ' not found');
} else {
$outputs.eq(i - 1).val(entities[0].Minbudget);
}
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.1/jquery.min.js"></script>
<select id="audience"></select>
<select id="cpic"></select>
<select id="bcr"></select>
<select id="control"></select>
<p>Control</p>
<p>10%: <input id="tenper" class="output" /></p>
<p><input class="tenperbudget" /></p>
<p>20%: <input id="twentyper" class="output" /></p>
<p>30%: <input id="thirtyper" class="output" /></p>
<p>40%: <input id="fortyper" class="output" /></p>
<p>50%: <input id="fiftyper" class="output" /></p>
这是一个小提琴示例,因为该片段似乎在数据的重压下挣扎:https ://jsfiddle.net/wxqe0Lpu/
推荐阅读
- node.js - 带循环的递归调用 API
- linux - 无需使用 cli 从特定 IP 源下载 s3 文件
- bash - 源 /.bash_profile 命令不起作用
- python - 如何基于beautifulsoup修复我关于web scraper的python代码?
- r - R中的这个错误是什么意思,而以前它没有
- jquery - 在 Jquery 的循环中从 Array 的下拉列表中追加和选择选项
- java - 在集成测试中每个方法不回滚后 Spring Data JPA 数据库更改
- javascript - PDFJS 没有突出显示搜索到的文本
- python - Discord.py 以数字为输入的猜谜游戏
- python - 为什么不在Answer 上工作?