使用JavaScript过滤器过滤对象数组时遇到问题。谁能帮我解决这个问题。
Here is the code below.
var searchString = "item1";
var data = [
{
checkInfo: {
checkId: "item1"
}
},
{
checkInfo: {
checkId: "item2"
}
}
];
我正尝试使用以下方法过滤上述数据。
const output = searchString ? data.filter(list => list.checkInfo.checkId === searchString)[0] : data[0];
如果要匹配,我想输出我想返回匹配的对象。如果不匹配,则总是要从数据数组返回对象的第一个数组。适用于比赛情况。当searchString单词与三元else不匹配时,条件不执行且返回未定义。任何人都可以查看我的代码并提出您的建议。
答案 0 :(得分:1)
您当前正在检查是否已定义searchString
并根据该选项进行选择。如果要检查是否与过滤器匹配,则需要先运行过滤器,然后再检查。由于看起来您只是在搜索第一个匹配项,因此您可以使用find()
以下内容将对两者进行检查:
var searchString = "item14";
var data = [{
checkInfo: {
checkId: "item1"
}
},
{
checkInfo: {
checkId: "item2"
}
}
];
let match = data.find(list => list.checkInfo.checkId === searchString)
const output = (searchString && match) || data[0];
console.log(output)
答案 1 :(得分:1)
使用filter
,我们可以这样做
var searchString = "item3";
var data = [
{
checkInfo: {
checkId: "item1"
}
},
{
checkInfo: {
checkId: "item2"
}
}
];
var temp = data.filter(item => (item.checkInfo.checkId === searchString));
temp = temp.length > 0 ? temp : data[0];
console.log(temp);
答案 2 :(得分:0)
如果filter
函数未找到任何内容,则返回一个空数组,这是一个真y值,因此三元条件永远不会触发错误条件。
因此,空数组中的第一个条目是undefined
。