Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何让函数根据传递给函数的内容返回不同的值?_Javascript_Arrays_Loops_If Statement_Return - Fatal编程技术网

Javascript 如何让函数根据传递给函数的内容返回不同的值?

Javascript 如何让函数根据传递给函数的内容返回不同的值?,javascript,arrays,loops,if-statement,return,Javascript,Arrays,Loops,If Statement,Return,我的功能无法正常工作。根据条件,我希望我的函数通过推入新数组来返回一个新数组。如果If条件为false,我想返回两个不同的字符串消息。以下是我的数据集示例: let items = [ { itemName: "Effective Programming Habits", type: "book", price: 18.99 }, { itemName: "Creation 3005",

我的功能无法正常工作。根据条件,我希望我的函数通过推入新数组来返回一个新数组。如果If条件为false,我想返回两个不同的字符串消息。以下是我的数据集示例:

let items = [
  { 
    itemName: "Effective Programming Habits", 
    type: "book", 
    price: 18.99
  },
  {
    itemName: "Creation 3005", 
    type: "computer",
    price: 399.99
  },
  {
    itemName: "Orangebook Pro", 
    type: "computer",
    price: 899.99
  }
到目前为止,当我的函数接受一个项目数组和一个项目类型作为字符串搜索词时,它返回的项目数组的类型与通过函数传递的类型匹配。但是,我还希望我的函数返回另外两个东西

如果购物车数组中没有项目,则返回字符串“您的购物车中没有任何项目”。这是否会被写入
匹配项。长度===0
? 如果没有与给定类型匹配的项目,则返回字符串“未找到该类型的项目。请搜索其他项目。”。如果(search!=items[i].type),这不是写为

在给定条件的情况下,如何使这两个字符串也返回?我觉得我好像被执行这些语句的顺序绊倒了。这是我到目前为止没有两个字符串返回值的代码

function findItems (items, search) {
  let matches = [];
  for (i = 0; i < items.length; i++) {
    if (items[i].type.includes(search)) {
      matches.push(items[i])
    }
  }
  return matches;
}
函数findItems(项目,搜索){
让匹配项=[];
对于(i=0;i

总之,如果搜索匹配,我希望函数返回一个数组。如果第一个条件为false,我希望根据新条件返回另外两条字符串消息中的一条。

您可以向函数中添加两个条件,以根据您描述的条件返回相应的字符串:

let项目=[{
itemName:“有效的编程习惯”,
键入:“书”,
售价:18.99
},
{
项目名称:“创建3005”,
键入:“计算机”,
售价:399.99
},
{
itemName:“Orangebook Pro”,
键入:“计算机”,
价格:899.99
}
];
函数findItems(项目、搜索){
如果(items.length==0){
return“您的购物车中没有任何项目。”;
}
让匹配项=[];
对于(i=0;ilog(findItems([],“computer”)可以返回对象,而不是返回项目数组。然后,当您使用函数的返回值时,您可以检查对象属性以获取消息或希望获得的任何内容。检查以下函数中的outputVal对象

function findItems (items, search) {
      let outputVal = { Message: "", 
                        matches: [] }
      
      for (i = 0; i < items.length; i++) {
        if (items[i].type.includes(search)) {
          outputVal.matches.push(items[i])
        }
      }
      if(outputVal.matches.length==0){
        outputVal.Message = "No Items Found!"
      }
      return outputVal;
    }
函数findItems(项目,搜索){
让outputVal={消息:“”,
匹配项:[]}
对于(i=0;i
您也可以使用

let items=[{itemName:“有效的编程习惯”,类型:“book”,价格:18.99},{itemName:“Creation 3005”,类型:“computer”,价格:399.99},{itemName:“Orangebook Pro”,类型:“computer”,价格:899.99}];
常量过滤器项=(项,搜索文本)=>{
如果(items.length==0){
return“您的购物车中没有任何项目。”;
} 
常量filteredItems=items.filter(item=>item.type.includes(searchText));
return filteredItems.length==0?“未找到该类型的项目。请搜索其他项目。”:filteredItems;
}
//从列表中选择一个匹配类型
日志(filteriems(条目,“book”);
//列表中没有匹配的类型
日志(filteriems(项,“未找到”);
//当购物车项目为空时
日志(filteriems([],“book”);
//列表中有多个匹配类型
控制台日志(过滤器项(“计算机”))
。作为控制台包装器{
最大高度:100%!重要;

}
谢谢您的回答。我知道我有所有的部分,但我写错了顺序。现在我意识到检查items.length==0
是否需要运行for循环。这些数据已经提供给我们了,我们可以在循环数组之前检查这个条件。这就是为什么它必须是第一位的原因。一旦我们有了matches数组,如果没有匹配项,那么我们可以检查
是否匹配。长度===0
,但只有在我们使用push方法之后。否则,这将始终返回为true,因为我们有意将数组长度设置为等于0。@ElinaMcGill实际上,您拥有所有部分。您在该注释中编写的解释完美地描述了代码应该如何工作以及如何工作。