首页 > 解决方案 > Javascript的map函数的代码中有一些我看不懂的地方

问题描述

下面的代码中有一些我不明白的地方。这就是地图(c => c)的地方。

我认为我不需要处理地图(c => c),有什么理由吗?

sortedArray() {
  return somearray
       .map(c => c)
       .sort((x, y) => this.otherSortMethod(x, y));
}

otherSortMethod(x, y) {
      if (
        `${x.date} ${x.time}` ===
        `${y.date} ${y.time}`
      )
        return 0;
      if (
        `${x.date} ${x.time}` >
        `${y.date} ${y.time}`
      )
        return 1;
      return -1;
    }

标签: javascript

解决方案


somearray.map()函数将返回一个新数组(克隆)。

somearray.sort()函数将对您现有的数组(变异)进行排序。

所以如果你直接使用somearray.sort((x, y) => this.otherSortMethod(x, y));你正在改变/修改一个现有的数组。这会导致副作用。因为您没有原始数组的任何引用/副本。

当您使用时,somearray.map().sort()您将拥有一个新的克隆、排序 + 原始数组。

编辑:

您没有在地图回调函数中执行任何操作,因此它将按原样返回一个元素。下面是相同的等效代码。

sortedArray() {
 let sortedArray = [...somearray]
 sortedArray.sort((x, y) => this.otherSortMethod(x, y));
 return sortedArray;
}


推荐阅读