根据另一个数组对数组进行排序

时间:2018-08-10 19:32:23

标签: javascript

我想根据另一个数组对数组进行排序

例如:

  <?xml version="1.0" encoding="utf-8"?>
    <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
      <soap12:Body>
        <entryPoint xmlns="http://www.example.com/WEBSERVICES/A2C">
          <user>username</user>
          <password>userpassword</password>
          <input>01016028605</input>
        </entryPoint>
      </soap12:Body>
    </soap12:Envelope>​

让myAnswer = [3,1,2,6,6,5,4];

事实上,我先要arrayChild然后再等等。

2 个答案:

答案 0 :(得分:0)

您可以使用sorting with map并获取所需顶部值的索引,也可以使用Infinity及其原始索引将其他值移至底部。

这适用于多个相同的值。

var array = [6, 5, 4, 3, 2, 1],
    children = [3, 1, 2],
    result = array
        .map((v, index) => ({ index, top: (children.indexOf(v) + 1) || Infinity }))
        .sort((a, b) => a.top - b.top || a.index - b.index)
        .map(({ index }) => array[index]);
    
console.log(result);

一种更快的方法可能是使用Set

这仅适用于唯一值。

var array = [6, 5, 4, 3, 2, 1],
    children = [3, 1, 2],
    result = Array.from(new Set([...children, ...array]));
    
console.log(result);

答案 1 :(得分:0)

使用Arrays.sort()并将自定义比较器传递给它。请尝试以下操作:

let arrayParent = [6, 5, 4, 3, 2, 1];
let arrayChild = [3, 1, 2];

arrayParent.sort((a,b)=>{
  var indexA = arrayChild.indexOf(a);
  var indexB = arrayChild.indexOf(b);
  if(indexA == -1 && indexB == -1){
    return 0;
  } else if(indexA == -1 || indexB == -1){
    return indexA === -1 ? 1 : -1;
  } else{
    return indexA - indexB;
  }
});

console.log(arrayParent);