gpt4 book ai didi

javascript - jQuery/javascript 在列表中查找值

转载 作者:行者123 更新时间:2023-11-29 17:30:49 25 4
gpt4 key购买 nike

我正在处理一个特殊问题。我将从模糊开始,如果有人需要更多细节,我可以提供项目背景。

我有一个选定的 ID(从复选框中选择):161

我有很多这样的 ID 行:

["161", "165", "573", "190", "150", "283"] // this one would be it
["160", "311", "793", "309", "301"]
["161", "165", "395", "306"] // this one would be it
["160", "311", "668", "191", "216", "301"]

我需要从上面的 ID 行中识别出哪些具有已选择的 ID。这并不难,我可以遍历每一行 ID(遍历实际数组)并执行 thisIDList[i] == selectedID

当我选择了多个 ID 时,我遇到了问题:["161", "306"]

现在我需要遍历行并确定哪些行具有两个所选 ID。

["161", "165", "573", "190", "150", "283"] // wouldn't be it
["160", "311", "793", "309", "301"]
["161", "165", "395", "306"] // this one would be it
["160", "311", "668", "191", "216", "301"]

等等。可以选择 1 到 5 个或 6 个 ID:["161", "306", "216", "668"]

有人能指出我正确的方向吗?我认为这基本上就像比较两个列表,其中列表 A 中的每个项目都需要在列表 B 中找到。


编辑

我应该补充一点,该行可以包含在所选列表中找不到的其他 ID。因此,如果所选 ID 是 ["161", "306"],则 ["161", "165", "395", "306"] 将是仍然匹配,即使它包含 165 和 395。


编辑

将更新并提供更多信息。我有一个单选按钮列表:

<input type="checkbox" name="filter" value="301" />
<input type="checkbox" name="filter" value="161" />
<input type="checkbox" name="filter" value="573" />
<input type="checkbox" name="filter" value="190" />

我有一个无序列表,每个列表都有一个数据属性(我正在使用元数据插件):

<ul>
<li data="{attrID: '160,197,161,194,195,190,162' }">Lorem Ipsum</li>
</ul>

单击单选按钮时:

// set the selected IDs
selectedIds = [];
$("input[name=filter]:checked").each(function(){
selectedIds.push(this.value);
});

// loop through each list
$('ul li').each(function () {

// get and set the metadata for the attrID key
meta = $(this).metadata();
idList = meta.attrID;

// find out if the selected IDs are found in this idList
var isMatch = matches(selectedIds,idList);

console.log(isMatch);

// my plan was to do this
if(isMatch){
// do something with this list item
}


});

最佳答案

这使用了 jQuery 中的 inArray 函数。它返回一个数组,其中包含包含目标集所有元素的集的索引。如果你的集合相对较小,就像你的例子一样,它应该足够快。

function matches( target, sets )
{
var matches= [];
for (var i = 0, setsLen = sets.length; i < setsLen; ++i ) {
if (isSubset(target,sets[i])) {
matches.push(i);
}
}
return matches;
}

function isSubset( target, set )
{
for (var j = 0, targetLen = target.length; j < targetLen; ++j) {
if ($.inArray(target[j], set) < 0) {
return false;
}
}
return true;
}

基于您的数据的一个小测试脚本:

$(function(){
var sets = [
["161", "165", "573", "190", "150", "283"],
["160", "311", "793", "309", "301"],
["161", "165", "395", "306"],
["160", "311", "668", "191", "216", "301"]
];

alert( matches( [ "161" ], sets ) );
alert( matches( [ "161","306" ], sets ) );
});

编辑:我根据您的添加更新了示例。我认为您只需要使用 isSubset 函数。我将把其余的答案留给上下文。

关于javascript - jQuery/javascript 在列表中查找值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4328304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com