这两个过滤器有什么区别?解决了

时间:2019-04-22 11:40:11

标签: javascript filter

这两个代码块之间有什么不同,结果是相同的。有人可以帮我解释一下区别吗?

更新

第一段代码无效。因为它不会从控制台发出任何错误,所以我假设它可以工作。

但是感谢“ TJ”指出,很明显,该代码没有用于比较功能的条目(firstEl,secondEl)。 因此,获取排序的姓氏的正确方法是使用第二段代码。

eded

  const sortPeople = people.sort((first, last) => {
  const [aFirstName, aLastName] = first.split(",");

  const [bFirstName, bLastName] = first.split(",");

  aLastName> bLastName ? 1 : -1; 

});
  console.log(sortPeople);

第二个代码

  const alpha = people.sort((lastOne, nextOne) => {
  const [aLast, aFirst] = lastOne.split(', ');
  const [bLast, bFirst] = nextOne.split(', ');
  return aLast > bLast ? 1 : -1;
});
console.log(alpha);

由T.J.拥挤者

**如果sort的实现对回调在相等条目中得到错误的返回值的事实并不太困惑。第二个返回值应该是return aLast.localeCompare(bLast);或至少返回aLast == bLast? 0:aLast> bLast? 1:-1; **

sample code sandbox

3 个答案:

答案 0 :(得分:1)

您需要返回两个姓氏的差,例如

people.sort((a, b) => a.split(', ')[0].localeCompare(b.split(', ')[0]));

答案 1 :(得分:0)

他们永远不会获得相同的结果!

对于第一个代码,您会注意到以下内容

const [firstName,lastName] = first.split(“,”); //如果是要排序的对象数组,将导致错误

first.lastName> last.lastName? 1:-1; //如果是您要排序的字符串数组,则会导致错误

,如果您要在返回之前键入代码,还应该使用return语句将其包装起来,在这种情况下,JavaScript不会添加隐式返回

return(first.lastName> last.lastName?1:-1);

People是包含姓氏的对象数组,这就是为什么它可以访问第一个lastName和第二个lastName的原因 从“第一个”和“最后一个”对象直接传递到箭头功能。

一组人应该是[{lastName:“ john”},{lastName:“ brad”},....]该对象还可以具有其他属性,例如firstName,age等等,以便使用这样。


在第二个代码中 人是一个字符串数组[“ last,first”,“ doe,john” ....]

const [aLast,aFirst] = lastOne.split(',');   const [bLast,bFirst] = nextOne.split(',');

传递给箭头函数的

lastOne和nextOne似乎是包含用逗号分隔的“ last,first”的字符串,并且在拆分之后,您将分解由于拆分“ lastOne”和“ nextOne”字符串而导致的数组,并且使用他们的lastName进行排序,使用2个新变量来保存要检查的值

答案 2 :(得分:-1)

     const sortPeople = people.sort((first, last) => {
  const [firstName, lastName] = first.split(",");
  first.lastName > last.lastName ? 1 : -1;
});
  console.log(sortPeople);

以上部分不执行任何操作,始终返回-1。因为first和last或not对象,所以您不能做first.lastName。 但是第二个代码。

const alpha = people.sort((lastOne, nextOne) => {
  const [aLast, aFirst] = lastOne.split(', ');
  const [bLast, bFirst] = nextOne.split(', ');
  return aLast > bLast ? 1 : -1;
});
console.log(alpha);

会根据逗号前的值对字符串进行排序。但是由于数组已经排序,因此它总是返回-1。这就是块的两个代码具有相同结果的原因。