js实现嵌套数组重排序

本文实例为大家分享了js实现嵌套数组重排序的具体代码,供大家参考,具体内容如下

总共遇到两个问题:

1、JS中for循环输出同一变量值的问题

js事件处理器在线程空闲事件不会运行,导致最后运行的时候输出的都是i最后的值。

解决方法:在循环中声明  this.content1 = {}

2、排序算法在序号到10以后出错

解决方法:没注意string和int,原数据为string

原数据:

目标:将table、text、image合并到一个content里面,并按blockNO排序

代码:

<script>
export default {
  data() {
    return {
      data: [],
      content1: {}
    }
  },
  created() {
    this.test()
  },
  methods: {
    async test() {
      const { data: res } = await this.$http.get('test1')
      for (let i = 0; i < res.length; i++) {
        this.data1 = {}
        this.data1.name = res[i].name
        this.data1.blockNO = res[i].blockNO
        this.data1.class = res[i].class
        this.data1.id = res[i].id
        this.data1.children = []
        this.data1.content = []
 
        if (res[i].text) {
          for (let j = 0; j < res[i].text.length; j++) {
            this.content1 = {}
            this.content1.blockNO = res[i].text[j].blockNO
            this.content1.type = 'text'
            this.content1.detail = res[i].text[j].text
            this.data1.content.push(this.content1)
          }
        }
        if (res[i].table) {
          for (let j = 0; j < res[i].table.length; j++) {
            this.content1 = {}
            this.content1.blockNO = res[i].table[j].blockNO
            this.content1.type = 'table'
            this.content1.detail = res[i].table[j].table
            this.data1.content.push(this.content1)
          }
        }
        if (res[i].image) {
          for (let j = 0; j < res[i].image.length; j++) {
            this.content1 = {}
            this.content1.blockNO = res[i].image[j].blockNO
            this.content1.type = 'image'
            this.content1.detail = res[i].image[j].image
            this.data1.content.push(this.content1)
          }
        }
        for (let j = 1; j < this.data1.content.length; j++) {
          for (let i = 0; i < this.data1.content.length - j; i++) {
            if (
              parseInt(this.data1.content[i].blockNO) >
              parseInt(this.data1.content[i + 1].blockNO)
            ) {
              let tempnum = this.data1.content[i + 1]
              this.data1.content[i + 1] = this.data1.content[i]
              this.data1.content[i] = tempnum
            }
          }
        }
        this.data.push(this.data1)
      }
      console.log(this.data)
    }
  }
}
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Javascript数组的排序 sort()方法和reverse()方法

    其中: 1.JavaScript的sort()中如果没有指定比较函数,则默认会按照字符的编码顺序进行升序排序.也就是说如果我们想要对数值进行排序得到的不一定是我们想要的结果. 2.Javascript的reverse()将数组中的元素逆序. 先看看上面的第一点,如果有一个数组arr=[1,6,3,7,9],使用arr.sort()后,数组的顺序为1,3,6,7,9,得到了我们想要的结果. 再看看下面的一个数组排序:arr=[3,1,16,34,30],如果执行arr.sort()后是不是还是会得

  • Js数组排序函数sort()介绍

    JavaScript实现多维数组.对象数组排序,其实用的就是原生的sort()方法,用于对数组的元素进行排序. sort() 方法用于对数组的元素进行排序.语法如下: arrayObject.sort(sortby) 返回值为对数组的引用.请注意,数组在原数组上进行排序,不生成副本. 如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序.要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较. 如果想按照其他标准进行排序,

  • JS实现根据数组对象的某一属性排序操作示例

    本文实例讲述了JS实现根据数组对象的某一属性排序操作.分享给大家供大家参考,具体如下: 根据数组中对象的某一属性排序 var newArray = [{ name: "aaa", value: 0 }, { name: "ddd", value: 3 }, { name: "bbb", value: 1 }, { name: "eee", value: 4 }, { name: "ccc", value:

  • JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)

    本文实例总结了JS数组排序技巧.分享给大家供大家参考,具体如下: ① 冒泡排序 bubbleSort:function(array){ var i = 0, len = array.length, j, d; for(; i<len; i++){ for(j=0; j<len; j++){ if(array[i] < array[j]){ d = array[j]; array[j] = array[i]; array[i] = d; } } } return array; } ② js

  • JS实现json对象数组按对象属性排序操作示例

    本文实例讲述了JS实现json对象数组按对象属性排序操作.分享给大家供大家参考,具体如下: 在实际工作经常会出现这样一个问题:后台返回一个数组中有i个json数据,需要我们根据json中某一项进行数组的排序. 例如返回的数据结构大概是这样: { result:[ {id:1,name:'中国银行'}, {id:3,name:'北京银行'}, {id:2,name:'河北银行'}, {id:10,name:'保定银行'}, {id:7,name:'涞水银行'} ] } 现在我们根据业务需要,要根据

  • js sort 二维数组排序的用法小结

    最近在搞js 排序的问题,因为数据库排序太耗资源,如果能转移到客户端去排序,能大大D减少服务器内存消耗.客户端的话,除了js,就是as了,可惜我as学得太烂,所以只能选择js来研究研究了...经过我的测试,js内置方法sort的效率非常高 我们知道在js中默认提供了sort函数,但是这个函数默认是按照数组内容的ascii码升序进行排列的,如果我们要对二维数组排序要如何做呢?在php中是有multi_sort函数可供调用的,但是在js中似乎没有这种函数,但是没关系 ,因为js的sort函数其实也提

  • js中数组(Array)的排序(sort)注意事项说明

    直接看代码吧,测试结果也贴在里面了 复制代码 代码如下: var arrDemo = new Array(); arrDemo[0] = 10; arrDemo[1] = 50; arrDemo[2] = 51; arrDemo[3] = 100; arrDemo.sort(); //调用sort方法后,数组本身会被改变,即影响原数组 alert(arrDemo);//10,100,50,51 默认情况下sort方法是按ascii字母顺序排序的,而非我们认为是按数字大小排序 arrDemo.so

  • js对数组中的数字从小到大排序实现代码

    例子 1 In this example we will create an array and sort it alphabetically: var arr = new Array(6) arr[0] = "Jani" arr[1] = "Hege" arr[2] = "Stale" arr[3] = "Kai Jim" arr[4] = "Borge" arr[5] = "Tove"

  • js使用Array.prototype.sort()对数组对象排序的方法

    本文实例讲述了js使用Array.prototype.sort()对数组对象排序的方法.分享给大家供大家参考.具体分析如下: 在讲对数组对象进行排序时,我们先来简单的了解一下Array.prototype.sort().sort方法接受一个参数--Function,function会提供两个参数,分别是两个进行比较的元素,如果元素是String类型则通过Unicode code进行比较,如果是Number类型则比较值的大小.如果比较的函数中返回1则两个元素交换位置,0和-1不交换位置.先看一个例

  • JavaScript中数组Array.sort()排序方法详解

    JavaScript中数组的sort()方法主要用于对数组的元素进行排序.其中,sort()方法有一个可选参数.但是,此参数必须是函数. 数组在调用sort()方法时,如果没有传参将按字母顺序(字符编码顺序)对数组中的元素进行排序,如果想按照其他标准进行排序,就需要进行传一个参数且为函数,该函数要比较两个值,并且会返回一个用于说明这两个值的相对顺序的数字. 1.对数字数组进行由小到大的顺序进行排序. 代码: var arr = [22,12,3,43,56,47,4]; arr.sort();

随机推荐