[英]How do I return a random value from array based on filtered data?
我正在尝试创建一个代码,当按下按钮时,会从我的数组中返回一个随机值。 更具体地说,我已经创建了一个代码,在按下按钮时,会返回来自数组的随机链接,并且代码会显示图像。 我想更进一步并拥有它,以便可以按标准过滤数组。 我在 js 中有如下数组格式: {site: "(link here, and does not have parenthesis in the actual code)", series: "1", type: "SP", dice: "1", rps: "S", species: "N/A", name: "Isabelle"}
400 多行的数组格式相同。 我的 HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Card Selector</title>
<link rel="stylesheet" href="mainimgbg.css">
</head>
<body class="light-theme">
<h1>amiibo Selector</h1>
<p id="msg">To Do:</p>
<ul>
<li class="list">Add exclusion parameters</li>
<li class="list">Add sanrio images</li>
</ul>
<input type=button id="btnSearch" value="Select" onclick="GetValue();" />
<div id="message"></div>
<script src="gendetailedextra.js"></script>
<script>alert("This site is a work in progress.")</script>
<noscript>You need to enable JavaScript to view the full site.</noscript>
</body>
</html>
我的js:
'use strict'
var myarray= new Array(
{400 line array formatted as mentioned above},);
function GetValue()
{
var random = myarray[Math.floor(Math.random() * myarray.length)];
//alert(random);
document.getElementById("message").innerHTML='<img src='+random+'>';
}
我正在查看名称生成器的代码,发现一个 HTML 代码片段似乎很有用,但我不知道如何实现它:
<script type="text/javascript">
<!--
function click_usage(box) {
if ($(box).is(':checked')) {
if ($(box).attr('id')=='all') {
$('.usage-cb').prop('checked', false);
} else {
$('#all').prop('checked', false);
}
}
}
//-->
</script>
我认为最好的方法是使用某种复选框,我可能可以用谷歌搜索如何在 HTML 端格式化。 此外,我遇到了一个问题,因为我现在在数组中除了链接之外还有多条数据,代码不再为我提供嵌入的图像。 如果需要,我愿意牺牲这个功能。
你的代码都很好,除了一个小细节。
当您调用GetValue()
时,您会获得数组的随机元素。 但是,此元素不是 URL 的字符串,而是 object ( {site:"abc", rps: "S", ...}
)。 要访问 object 中的值,请使用.
分隔器。 因此,您的 function 中的行应如下所示:
document.getElementById("message").innerHTML='<img src=' + random.site + '>';
( random.site
而不是random
。如果您需要不同的属性,请使用random.property_name_here
)
根据您从其他网站找到的代码:此代码需要 jQuery 并且特定于该站点的 HTML。 这段代码所做的只是在某些条件下取消选中某些复选框。
为了更好的可读性,我会这样格式化你的代码:
let myArray= [{site:"abc", type:"SP", ...}, {...}, {...}, {...}];
function randomFromArray(arr) {
return arr[Math.floor(Math.random() * arr.length)];
}
document.getElementById("message").innerHTML=`<img src="${randomFromArray(myArray).site}">`;
编辑:Function 按标准过滤您的阵列。
function filterArr(array, field, value) {
return array.filter(function (k) {
return k[field] === value;
});
}
//usage:
filterArr(myArray, "rps", "S"); //returns all elements with `rps: "S"`
filterArr(myArray, "type", "SP"); //returns all elements with `type: "SP"`
因此,要从过滤后的数组中获取随机元素:
document.getElementById("message").innerHTML=`<img src="${randomFromArray(filterArr(myArray, "type", "SP")).site}">`;
要使您的按钮使用新功能:(删除onclick="GetValue();"
)
document.getElementById("btnSearch").addEventListener('click', function () {
document.getElementById("message").innerHTML=`<img src="${randomFromArray(filterArr(myArray, "type", "SP")).site}">`;
}
了解更多: Object(MDN 文档) return
关键字(MDN 文档) 模板文字(MDN 文档) addEventListener
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.