美文网首页
js交换数组中2个元素的位置,实现排序功能

js交换数组中2个元素的位置,实现排序功能

作者: 坏丶毛病 | 来源:发表于2020-10-26 09:41 被阅读0次

原始数据:数组中有三个关于电影的对象数据

const movies = [
    { title: 'a', year: 2018, rating: 4. 3 },
    { title: 'b', year: 2018, rating: 4.7 },
    { title: 'c', year: 2018, rating: 4.9 }
];

需求:需要根据评分(rating)的高低,按倒序排列,即评分越高,越靠前

错误示范一:

// 冒泡排序法:
  for (var i = 0; i < movies.length - 1; i++) {
    for (var k = i + 1; k < movies.length; k++) {
      if (movies[i].rating < movies[k].rating) {
          movies.splice(i, 1, movies[k]);
          movies.splice(k, 1, movies[i]);
      }
    }
  }

个人想法:把当前值赋给下一个值,再把下一个值赋给当前值,理论上来说没问题的。但是...............

结果:

image

错误示范二:

// 冒泡排序法:
  for (var i = 0; i < movies.length - 1; i++) {
    for (var k = i + 1; k < movies.length; k++) {
      if (movies[i].rating < movies[k].rating) {
          movies.splice(i, 1, ...movies.splice(k, 1, movies[i]));
      }
    }
  }

结果:评分都覆盖了,变为一组数据了

image

正确示范一:

// 冒泡排序法
for (var i = 0; i < movies.length - 1; i++) {
    for (var k = i + 1; k < movies.length; k++) {
      if (movies[i].rating < movies[k].rating) {
        var temp = arr[i];
        arr[i] = arr[k];
        arr[k] = temp;
      }
    }
  }

结果:

image

正确示范二(es6解构赋值写法):

// 冒泡排序法:
  for (var i = 0; i < movies.length - 1; i++) {
    for (var k = i + 1; k < movies.length; k++) {
      if (movies[i].rating < movies[k].rating) {
        [movies[i], movies[k]] = [movies[k], movies[i]];
      }
    }
  }

结果:

image

正确示范三:sort排序(注意这样是返回的新数组,而不是修改原数组)

const title3 = movies.sort((a, b) => {
    return a.rating > b.rating ? -1 : (a.rating = b.rating) ? 0 : 1;
})

返回值是负数,意味着不交换位置,返回值是正数交换位置,0的话,值是相等的,也就不存在交换一说了

结果:

image

正确示范四:sort排序(注意这样是返回的新数组,而不是修改原数组)

const title = movies
    .sort((a, b) => a.rating - b.rating)
    .reverse()

// 或者

const title = movies
    .sort((a, b) => b.rating - a.rating)

直接返回a-b的结果,a大于b,即返回正数交换,a小于b,即返回负数不交换,这样得到的数据是反的,即分数越高,排名越靠后,通过翻转得到正确的数据

或者返回b-a的结果就是正确的

结果:

image

如上就是根据需求交换数组数据实现排序的方法。

如有问题,请指出,接受批评。

相关文章

  • js交换数组中2个元素的位置,实现排序功能

    原始数据:数组中有三个关于电影的对象数据 需求:需要根据评分(rating)的高低,按倒序排列,即评分越高,越靠前...

  • 数组逆序

    数组逆序: 数组中的元素进行,位置上的交换 逆序实现思想:数组最远端位置交换 数组的指针思想:就是数组的索引 大指...

  • JS 数组交换元素位置

    如图

  • 选择排序

    思考 线性结构中交换元素位置需要利用元素索引交换 “新”数组递减1,通过for循环遍历初始数组建立联系 代码

  • (C++实现)经典排序算法

    1. 交换排序 根据数组中两个元素值的大小来交换两个元素在数组中的位置。 1.1 冒泡排序 1.1.1 基本思想:...

  • 10大排序算法梳理,附动图

    算法与实现 选择排序 算法思想 从数组中选择最小元素,将它与数组的第一个元素交换位置。再从数组剩下的元素中选择出最...

  • Fisher–Yates shuffle洗牌算法

    背景 如何将一个数组中的元素随机打乱?如何又却能确保一个元素的位置不变,将其他元素位置打乱? 问题:用js实现一个...

  • 选择排序和冒泡排序

    规则:比较大小,位置交换 选择排序:数组中的每个元素都进行比较 冒泡排序:数组中相邻元素进行比较 选择排序 for...

  • 看犀牛书的笔记——数组

    在js中数组就是值的有序集合。每个值叫做一个元素,元素在数组中的位置叫做索引。 JavaScrit数组是无类型的:...

  • Swift数组元素位置交换

    第一种方法 第二种方法 第三种方法 第四种方法 第五种方法

网友评论

      本文标题:js交换数组中2个元素的位置,实现排序功能

      本文链接:https://www.haomeiwen.com/subject/wntamktx.html