首页 > 解决方案 > 在数组中搜索对象

问题描述

该函数必须将汽车的品牌作为第二个参数。如果mark未找到,则应显示“售车”消息。如果找到品牌,它应该显示您正在寻找的汽车的对象。错误是什么?

const arr = [{
    "mark": "BMW",
    "price": "55 000",
    "color": "red",
    "constructor": "Billy%Zekun",
    "country": "Germany",
    "certificate": "yes"
  },
  {
    "mark": "Mercedes-benz",
    "price": "63 000",
    "color": "blue",
    "constructor": "Jon%Adams",
    "country": "Germany",
    "certificate": "yes"
  },
  {
    "mark": "TOYOTA",
    "price": "48 000",
    "color": "blue",
    "constructor": "Jon Hubert",
    "door": "3",
    "max_people": "7",
    "country": "Japan",
    "certificate": "yes"
  },
  {
    "mark": "Volkswagen",
    "price": "36 000",
    "color": "red",
    "constructor": "Pier Sun",
    "country": "Germany",
    "certificate": "no"
  },
];

function car(arr, mark) {
  let carss = arr.filter(function(item) {
    return item.mark === mark;
  })
  return carss !== mark ? carss[0] : "car sold";
};

console.log(car(arr, "Mercedes-benz", ));

标签: javascriptarraysmethods

解决方案


有两个问题:

  1. 您不能使用!==(or !=, or ==, or ===) 比较数组。即使它们具有相同的内容,两个不同的数组也永远不会彼此相等。

  2. filter不是在数组中搜索匹配项的正确选择。在这种情况下,由于您想返回找到的第一辆车,因此您将使用find(使用与您现在相同的谓词函数)。

使用find

function car(arr,mark ){
  let car = arr.find(function(item){
     return item.mark === mark ;
  })
  return car || "car sold";
}

或者你可以使用箭头函数

function car(arr,mark ){
  let car = arr.find(item => item.mark === mark);
  return car || "car sold";
}

现场示例:

const arr = [
   {  
     "mark":"BMW",
     "price":"55 000",
     "color":"red",
     "constructor":"Billy%Zekun",
     "country":"Germany",
     "certificate":"yes"
  },
  {  
    "mark":"Mercedes-benz",
    "price":"63 000", 
    "color":"blue",
    "constructor":"Jon%Adams",
    "country":"Germany",
    "certificate":"yes"
  },
  {  
    "mark":"TOYOTA", 
    "price":"48 000", 
    "color":"blue",
    "constructor":"Jon Hubert",
    "door":"3"  ,
    "max_people":"7",
    "country":"Japan",
    "certificate":"yes"
  },
  {  
    "mark":"Volkswagen",
    "price":"36 000", 
    "color":"red",
    "constructor":"Pier Sun",
    "country":"Germany",
    "certificate":"no"
  },
 ];

function car(arr,mark ){
  let car = arr.find(item => item.mark === mark);
  return car || "car sold";
}

console.log(car(arr , "Mercedes-benz"));

(您的调用中还有一个额外,console.log内容,我在示例中删除了它。它之所以有效,是因为现代 JavaScript 中的参数列表中允许使用尾随逗号,但几年前它会失败。)


推荐阅读