【问题标题】:What is different between these two filter?这两个过滤器有什么不同?
【发布时间】:2019-04-22 11:40:11
【问题描述】:

这两个代码块有什么不同,结果是一样的。任何人都可以帮助我并解释其中的区别吗?

  const sortPeople = people.sort((first, last) => {
  const [firstName, lastName] = first.split(",");
  first.lastName > last.lastName ? 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);

sample code sandbox

【问题讨论】:

  • “这两个过滤器有什么不同?”它们都不是过滤器。两者都是错误的(如果目标是正确排序)。
  • 你从哪里得到这些的?第一个有点荒谬(并且两者都有问题),因为它似乎试图对包含字符串和对象的数组进行排序 lastName 属性。 (您可以拥有一个对象数组,其中包含一个split 方法和一个lastName 属性,但是...)我们需要很多更多上下文和更清晰,比“有什么不同”更明确的问题,以便为您提供帮助。
  • 目的是按姓氏字母顺序对人进行排序,
  • @T.J. Crowder 也许您可以尝试底部的示例代码?万一你错过了
  • @hoangdv - 也许,如果sort 的实现不会因为回调获取相等条目的返回值错误这一事实而感到困惑。 :-) 第二个的return 应该是return aLast.localeCompare(bLast); 或至少return aLast == bLast ? 0 : aLast > bLast ? 1 : -1;

标签: javascript filter


【解决方案1】:

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

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

const [firstName, lastName] = first.split(",");//如果是你排序的对象数组会报错

first.lastName > last.lastName ? 1:-1; // 如果你正在排序的字符串数组会导致错误

如果你在返回之前输入代码,你也应该使用 return 语句包装它,JavaScript 在这种情况下不会添加隐式返回

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

People 是一个包含姓氏的对象数组,这就是为什么它可以访问第一个 lastName 和第二个 lastName 从“first”和“last”对象直接传递给箭头函数。

人的数组应该是 [{ lastName:"john"},{lastName:"brad"},....] 该对象可能还包含其他属性,例如 firstName , age ,等等,以便使用就这样吧。


While 对于第二个代码 People 是一个字符串数组 ["last,first","doe,john"....]

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

传递给箭头函数的lastOne和nextOne似乎是包含“last,first”的字符串,用逗号分隔,拆分后您正在解构拆分“lastOne”和“nextOne”字符串和使用他们的姓氏进行排序,使用 2 个新变量来保存要检查的值

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:
           const sortPeople = people.sort((first, last) => {
        const [firstName, lastName] = first.split(",");
        first.lastName > last.lastName ? 1 : -1;
      });
        console.log(sortPeople);
      

      上面的部分什么都不做,它总是返回-1。因为第一个和最后一个或不反对所以你不能做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。这就是为什么块的两个代码都有相同的结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-24
        • 2012-08-26
        • 2015-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-01
        • 1970-01-01
        相关资源
        最近更新 更多