Javascript 如何在纯JS中通过包含元素顺序对数组进行排序

Javascript 如何在纯JS中通过包含元素顺序对数组进行排序,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,假设我有一个由10个元素组成的数组,其中一些元素实际上是其他元素的子元素。我将如何订购此阵列,以使最优秀的家长排在第一位,而最优秀的孩子排在最后 [ input, select, radio, div (containing some of the form elements in the array), h2, div (containing the h2 in the array), form, textarea, a,

假设我有一个由10个元素组成的数组,其中一些元素实际上是其他元素的子元素。我将如何订购此阵列,以使最优秀的家长排在第一位,而最优秀的孩子排在最后

[
    input,
    select,
    radio,
    div (containing some of the form elements in the array),
    h2,
    div (containing the h2 in the array),
    form,
    textarea,
    a,
    span
]

在这种特殊情况下,表单元素可能是最重要的父元素,但我正在寻找的解决方案是在没有任何此类知识的情况下创建这样一个顺序

您可以使用
Array.map()
为每个元素创建一个分数-分数基于元素拥有的父元素的数量。现在,您可以根据元素的分数对元素进行排序,并使用另一个
Array.map()
提取元素:

const els=Array.from(document.queryselectoral('div*'))
.map(el=>{
得分=0,p=el;
而(p=p.parentNode){score++;}
返回[el,得分];
})
.sort(([ea,sa],[eb,sb])=>sa-sb)
.map(([el])=>el)
控制台日志(els)

氢
A.

请阅读:该列表是如何编制的?在制作时保留对原始订单的引用可能是一个好主意。您应该看到这个=>