From e8cdfac9b8d07e4559e2d0d04373935df5e48d7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=AB=E8=B0=B7=E5=89=91=E4=BB=99?= Date: Wed, 25 May 2022 15:38:26 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A9=E6=90=9C=E5=8D=95=E4=B8=BB=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E4=B9=9F=E8=83=BD=E6=90=9C=E5=87=BA=E5=8D=95=E5=89=AF?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E6=80=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script-universal_function.js | 29 +++++++++++++--------- script.js | 48 ++++++++++++++++++------------------ 2 files changed, 41 insertions(+), 36 deletions(-) diff --git a/script-universal_function.js b/script-universal_function.js index 10ca09d6..1762ba56 100644 --- a/script-universal_function.js +++ b/script-universal_function.js @@ -643,22 +643,27 @@ function searchCards(cards, attr1, attr2, fixMainColor, types, typeAndOr, rares, if (attr1 != null && attr1 === attr2 || //主副属性一致并不为空 (attr1 === 6 && attr2 === -1)) //主副属性都为“无” { //当两个颜色相同时,主副一样颜色的只需判断一次 - cardsRange = cardsRange.filter(c => c.attrs[0] === attr1 && c.attrs[1] === attr1); - } else if (fixMainColor) //如果固定了顺序 + cardsRange = cardsRange.filter(c => c.attrs[0] === attr1 && c.attrs[1] === attr2); + } + else if (fixMainColor) //如果固定了顺序 { - const a1null = attr1 === null, - a2null = attr2 === null; - cardsRange = cardsRange.filter(c => - (a1null ? true : c.attrs[0] === attr1) && - (a2null ? true : c.attrs[1] === attr2) - ); - } else //不限定顺序时 + const a1IsNull = attr1 === null, + a2IsNull = attr2 === null; + if (!a1IsNull || !a2IsNull) { //当a1、a2任一不为null(任意)时才需要筛选 + cardsRange = cardsRange.filter(c => + (a2IsNull ? c.attrs[0] === 6 && c.attrs[1] === attr1 : false) || //当2为随机,只有属性1时,也专门搜只有副属性=属性1的怪物 + (a1IsNull ? true : c.attrs[0] === attr1) && + (a2IsNull ? true : c.attrs[1] === attr2) + ); + } + } + else //不限定顺序时 { - const search_attrs = [attr1, attr2].filter(a => a !== null && a >= 0 && a <= 5); //所有非空属性 - const anone = attr1 === 6 || attr2 === -1; //是否有“无”属性 + const search_attrs = [attr1, attr2].filter(a => a != null && a >= 0 && a <= 5); //所有非空属性 + const aNone = attr1 === 6 || attr2 === -1; //是否有“无”属性 cardsRange = cardsRange.filter(c => search_attrs.every(a => c.attrs.includes(a)) && - (anone ? (c.attrs.includes(6) || c.attrs.includes(-1)) : true) + (aNone ? (c.attrs.includes(6) || c.attrs.includes(-1)) : true) ); } //类型 diff --git a/script.js b/script.js index d09e1134..7e8f4fdd 100644 --- a/script.js +++ b/script.js @@ -2715,8 +2715,8 @@ function initialize(event) { const searchEvolutionByThis = settingBox.querySelector(".row-mon-id .search-evolution-by-this"); searchEvolutionByThis.onclick = function() {showSearch(Cards.filter(card=>card.evoMaterials.includes(editBox.mid)))}; - const s_attr1s = Array.from(searchBox.querySelectorAll(".attrs-div .attr-list-1 .attr-radio")); - const s_attr2s = Array.from(searchBox.querySelectorAll(".attrs-div .attr-list-2 .attr-radio")); + const s_attr1s = Array.from(searchBox.querySelectorAll(".attrs-div .attr-list-1 [name=\"attr-1\"]")); + const s_attr2s = Array.from(searchBox.querySelectorAll(".attrs-div .attr-list-2 [name=\"attr-2\"]")); const s_fixMainColor = searchBox.querySelector("#fix-main-color"); const s_typesDiv = searchBox.querySelector(".types-div"); const s_typeAndOr = s_typesDiv.querySelector("#type-and-or"); @@ -3009,6 +3009,7 @@ function initialize(event) { const searchClose = s_controlDiv.querySelector(".search-close"); const searchClear = s_controlDiv.querySelector(".search-clear"); + function returnCheckedInput(ipt) { return ipt.checked; } @@ -3017,6 +3018,17 @@ function initialize(event) { return ipt.value; } + function returnRadiosValue(radioArr) { + let checkedRadio = radioArr.find(returnCheckedInput); + let firstCheckedValue = checkedRadio ? returnInputValue(checkedRadio) : undefined; + return firstCheckedValue; + } + function returnCheckBoxsValues(checkBoxsArr) { + let checkedCheckBoxs = checkBoxsArr.filter(returnCheckedInput); + let checkedValues = checkedCheckBoxs.map(returnInputValue); + return checkedValues; + } + function Str2Int(str) { return parseInt(str, 10); } @@ -3088,31 +3100,19 @@ function initialize(event) { s_add_show_abilities.onchange = reShowSearch; s_add_show_abilities_with_awoken.onchange = reShowSearch; - const startSearch = function(cards, customAdditionalFunction) { - if (customAdditionalFunction == undefined) customAdditionalFunction = []; - const attr1Filter = s_attr1s.filter(returnCheckedInput).map(returnInputValue); - const attr2Filter = s_attr2s.filter(returnCheckedInput).map(returnInputValue); + const startSearch = function(cards, customAdditionalFunction = []) { let attr1, attr2; - if (attr1Filter.length > 0) { - if (!isNaN(attr1Filter[0])) { - attr1 = parseInt(attr1Filter[0], 10); - } else { - attr1 = null; - } - } - if (attr2Filter.length > 0) { - if (!isNaN(attr2Filter[0])) { - attr2 = parseInt(attr2Filter[0], 10); - } else { - attr2 = null; - } - } - const typesFilter = s_types.filter(returnCheckedInput).map(returnInputValue).map(Str2Int); + attr1 = returnRadiosValue(s_attr1s); //获取选中单选框的值 + attr2 = returnRadiosValue(s_attr2s); //获取选中单选框的值 + attr1 = isNaN(attr1) ? null : Str2Int(attr1); //将值转为十进制 + attr2 = isNaN(attr2) ? null : Str2Int(attr2); //将值转为十进制 + + const typesFilter = returnCheckBoxsValues(s_types).map(Str2Int); const rareFilter = [ - s_rareLows.filter(returnCheckedInput).map(returnInputValue).map(Str2Int)[0], - s_rareHighs.filter(returnCheckedInput).map(returnInputValue).map(Str2Int)[0], + returnCheckBoxsValues(s_rareLows).map(Str2Int)[0], + returnCheckBoxsValues(s_rareHighs).map(Str2Int)[0], ]; - const sawokensFilter = s_sawokens.filter(returnCheckedInput).map(returnInputValue).map(Str2Int); + const sawokensFilter = returnCheckBoxsValues(s_sawokens).map(Str2Int); const awokensFilter = s_awokensIcons.filter(btn => parseInt(btn.getAttribute("data-awoken-count"), 10) > 0).map(btn => { const awokenIndex = parseInt(btn.getAttribute("data-awoken-icon"), 10); return {