返回未定义的javaScript对象过滤器

时间:2018-08-07 17:14:28

标签: javascript arrays filter

使用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不匹配时,条件不执行且返回未定义。任何人都可以查看我的代码并提出您的建议。

3 个答案:

答案 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