javascript - 无法对二维数组的每个数组进行排序

标签 javascript arrays

我试图用两个排序层对一些项目进行排序。例如,我有一个包含列的列表。一列是类型,一列是年份。现在我想对项目类型以及所有具有相同类型的项目进行排序,必须在一年之后进行排序。

我所做的是获取所有项目的数组并对类型进行排序。
然后我采用 sortedArray 并将每个具有相同类型的项目插入一个数组(这是一个二维数组),所以我将它们作为单独的数组。
然后我想对二维数组的每个数组的年份进行排序

到目前为止,这是我的代码

function sortDivs(type, reverse) {

    let sortedList = items.map((e) => ({ // Map each item to a object with its element and its child element's text
        e, // element
        text: e.querySelector('.wrap.toggler .'+type).textContent, // the text to be compared
        year: e.querySelector('.wrap.toggler .'+'jahr').textContent.replace(' ', '').replace('-', '') // The year to compare

    })).sort(({text:a},{text:b}) => 

        reverse ? b.localeCompare(a) : a.localeCompare(b)

    )

    // if type 'year' no need to sort second layer
    if(type == 'jahr') return

    // Sort each duplicate type of clicked tab per year , newest top

    let currentText = sortedList[0].text

    let tmpArray = []
    let array2D = []

    // Push same items in seperate arrays of array2D
    sortedList.forEach((item, i) => { 

        if(item.text != currentText) {

            array2D.push(tmpArray)

            tmpArray = []

            currentText = item.text
        }

        if(item.text == currentText) {

            tmpArray.push(item)
        }

        if(i == sortedList.length - 1) {

            array2D.push(tmpArray)
        }
    })


    console.log('Seperated Arrays ', array2D)

    // Everything works till here... The arrays dont get sorted
    // Sort each array of array2D
    tmpArray = []

    array2D.forEach(array => {

        array.sort(({year:a}, {year:b}) =>  {

            b.localeCompare(a)

        })

    })

    console.log('seperate sorted arrays ',array2D)

    array2D.forEach(e =>  {

            console.log('final', e)

    })
}

它可以让我得到所有排序的类型并将它们存储在单独的数组中。但是当循环遍历二维数组并对每个数组进行排序时不起作用。我得到未排序的数组.. 2019 年必须是第一个。

enter image description here

数组结构可以在屏幕截图中看到或在此处字符串化:
`
[
[
{"e":{"jQuery111307164768320580499":8},"text":"Fertiggestellt ","year":"2018"},
{"e":{"jQuery111307164768320580499":9},"text":"Fertiggestellt ","year":"2017"},
{"e":{"jQuery111307164768320580499":21},"text":"Fertiggestellt ","year":"2013"},
{"e":{"jQuery111307164768320580499":25},"text":"Fertiggestellt ","year":"2019"},
{"e":{"jQuery111307164768320580499":27},"text":"Fertiggestellt ","year":"2017"},
{"e":{"jQuery111307164768320580499":28},"text":"Fertiggestellt ","year":"2017"},
{"e":{"jQuery111307164768320580499":29},"text":"Fertiggestellt ","year":"2017"},
{"e":{"jQuery111307164768320580499":30},"text":"Fertiggestellt ","year":"2014"},
{"e":{"jQuery111307164768320580499":31},"text":"Fertiggestellt ","year":"2014"},
{"e":{"jQuery111307164768320580499":32},"text":"Fertiggestellt ","year":"2013"},
{"e":{"jQuery111307164768320580499":33},"text":"Fertiggestellt ","year":"2013"},
{"e":{"jQuery111307164768320580499":34},"text":"Fertiggestellt ","year":"2013"},
{"e":{"jQuery111307164768320580499":35},"text":"Fertiggestellt ","year":"2012"},
{"e":{"jQuery111307164768320580499":36},"text":"Fertiggestellt ","year":"2012"},
{"e":{"jQuery111307164768320580499":37},"text":"Fertiggestellt ","year":"2009"},
{"e":{"jQuery111307164768320580499":38},"text":"Fertiggestellt ","year":"2006"},{"e":{"jQuery111307164768320580499":39},"text":"Fertiggestellt ","year":"2005"},
{"e":{"jQuery111307164768320580499":40},"text":"Fertiggestellt ","year":"2005"},
{"e":{"jQuery111307164768320580499":41},"text":"Fertiggestellt ","year":"2001"},
{"e":{"jQuery111307164768320580499":42},"text":"Fertiggestellt ","year":"2009"}
]
,
[
{"e":{"jQuery111307164768320580499":6},"text":"im Bau ","year":"2017"},{"e":{"jQuery111307164768320580499":7},"text":"im Bau ","year":"2017"},{"e":{"jQuery111307164768320580499":26},"text":"im Bau ","year":"2011"}
],
[
{"e":{"jQuery111307164768320580499":4},"text":"in Planung ","year":"2018"},
{"e":{"jQuery111307164768320580499":5},"text":"in Planung ","year":"2018"},
{"e":{"jQuery111307164768320580499":10},"text":"in Planung ","year":"2017"}
],
[
{"e":{"jQuery111307164768320580499":20},"text":"Machbarkeitsstudie ","year":"2016"}
],
[
{"e":{"jQuery111307164768320580499":11},"text":"Wettbewerb ","year":"2019"},
{"e":{"jQuery111307164768320580499":12},"text":"Wettbewerb ","year":"2018"},
{"e":{"jQuery111307164768320580499":13},"text":"Wettbewerb ","year":"2018"},
{"e":{"jQuery111307164768320580499":14},"text":"Wettbewerb ","year":"2016"},
{"e":{"jQuery111307164768320580499":15},"text":"Wettbewerb ","year":"2017"},
{"e":{"jQuery111307164768320580499":16},"text":"Wettbewerb ","year":"2015"},
{"e":{"jQuery111307164768320580499":17},"text":"Wettbewerb ","year":"2018"},
{"e":{"jQuery111307164768320580499":18},"text":"Wettbewerb ","year":"2017"},
{"e":{"jQuery111307164768320580499":19},"text":"Wettbewerb ","year":"2016"},
{"e":{"jQuery111307164768320580499":22},"text":"Wettbewerb ","year":"2015"},
{"e":{"jQuery111307164768320580499":23},"text":"Wettbewerb ","year":"2015"},
{"e":{"jQuery111307164768320580499":24},"text":"Wettbewerb ","year":"2015"}
]
]
`

最佳答案

您在第二类中缺少返回

array2D.forEach(array => {

    array.sort(({year:a}, {year:b}) =>  {

        return b.localeCompare(a)

    })

})

您也可以将其写为不带返回的表达式
array.sort(({year:a}, {year:b}) => b.localeCompare(a))

工作沙箱在这里
https://codesandbox.io/s/sorting2ds-735qm

关于javascript - 无法对二维数组的每个数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60707601/

相关文章:

javascript - 关闭 MVC4 应用程序中的 jQuery 模式对话框

php - 使用javaScript在linux环境下的Intranet中获取客户端主机名

arrays - 传递给不带参数的调用的参数 Data(contentOf :)

javascript - 将字符串转换为对象 - Javascript

xml - 使用未知大小的数组中的项目作为选项在 powershell 中创建菜单

javascript - 如何获取比数组中其他元素更大的3个对象javascript

javascript - 如何向引导轮播图像添加框阴影?

javascript - 悬停时共享按钮

javascript - 获取嵌套的 JSON

javascript - 使用 Javascript 从 JSON 对象访问坐标数组