使用javascript在对象中搜索数组而不使用循环

PWT*_*PWT 2 javascript arrays search object

我想找到比使用2次迭代在对象中查找值更好,更优雅的解决方案.我查看了在一个数组中搜索的函数,例如find,indexOf,但我想知道我可以在不使用for或forEach的情况下搜索对象.

假设我想找到所有游泳运动员.到目前为止我得到了什么.

members = [
  { name: "Sue", hobby: ["Swimming", "Running", "Dancing"] },
  { name: "Sam", hobby: ["Cars", "Travelling"] },
  { name: "John", hobby: ["Reading", "Swimming"] },
  { name: "Rob", hobby: ["Running", "Coding"] },      
];
function findSwimmers(members, hobby) {      
  let swimmers = [];      
  members.forEach(function (e){        
    e.hobby.forEach(function (element){          
      if (element.toLowerCase() === hobby.toLowerCase()) {
        swimmers.push(e);
      }
    });
  });
  return swimmers;
}
Run Code Online (Sandbox Code Playgroud)

Mih*_*nut 5

您可以通过将回调函数作为参数传递filter来结合使用.some

let members = [
  { name: "Sue", hobby: ["Swimming", "Running", "Dancing"] },
  { name: "Sam", hobby: ["Cars", "Travelling"] },
  { name: "John", hobby: ["Reading", "Swimming"] },
  { name: "Rob", hobby: ["Running", "Coding"] },      
];

function findSwimmers(members, hobby) {      
  return members_swimming = members.filter(({hobby}) => hobby.some(item => item == "Swimming"));
                                
}

console.log(findSwimmers(members, "Swimming"));
Run Code Online (Sandbox Code Playgroud)

  • 建议结合OP的`toLowerCase`(或类似的)而不是硬编码"游泳"`.甚至可能提到[`String#localeCompare`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare)和`sensitivity:"base"`(其中)可用). (2认同)