簡體   English   中英

使用javascript sort更改基於另一個數組的順序

[英]Changing the order of an array based on another with javascript sort

我有兩個數組

A = [green, blue, red];

B = [2, 1, 0]

我想將A的順序更改為[紅色,藍色,綠色]。 這些更改基於B的值。下面是我嘗試過的內容,

arrangeValues();
function arrangeValues() {
    A.sort((a,b)=>{
        let orderA:any=B.indexOf(a.value);
        let orderB:any=B.indexOf(b.value);
        if (orderA==-1)
            orderA=99999;
        if (orderB==-1)
            orderB=99999;
        return orderB-orderA
    })
}

我想將A的順序更改為[紅色,藍色,綠色]

最簡單的方法是使用B的索引創建一個新數組,並根據您在B位置從A獲取值:

 const A = ["green", "blue", "red"]; const B = [2, 1, 0]; const result = []; B.forEach((entry, index) => { result[entry] = A[index]; }); console.log(result); 

只是為了確保確實能滿足您的要求(因為這實際上是我的錯別字,我的意思是做一些不同的事情,但似乎意外地做了您想要的事情),以下是這六個組合:

 const A = ["green", "blue", "red"]; function test(B) { const result = []; B.forEach((entry, index) => { result[entry] = A[index]; }); console.log(B.join(", "), "=>", result.join(", ")); } for (let i = 0; i < A.length; ++i) { for (let j = 0; j < A.length; ++j) { if (j != i) { for (let k = 0; k < A.length; ++k) { if (i != k && j != k) { test([i, j, k]); } } } } } 
 .as-console-wrapper { max-height: 100% !important; } 

這是六個人按照我的意思去做的事情(這是zvona做的 ,zvona的做得更干凈):

 const A = ["green", "blue", "red"]; function test(B) { const result = []; B.forEach((entry, index) => { result[index] = A[entry]; }); console.log(B.join(", "), "=>", result.join(", ")); } for (let i = 0; i < A.length; ++i) { for (let j = 0; j < A.length; ++j) { if (j != i) { for (let k = 0; k < A.length; ++k) { if (i != k && j != k) { test([i, j, k]); } } } } } 
 .as-console-wrapper { max-height: 100% !important; } 

您可以使用簡單的for循環來完成此操作,例如:

function arrangeValues(A,B) {
  var sorted = [];
  for(var i=0;i<A.length;i++){
      sorted.push(A[B[i]]);
  }
  return sorted;
}

這是一個實時示例:

 function arrangeValues(A,B) { var sorted = []; for(var i=0;i<A.length;i++){ sorted.push(A[B[i]]); } return sorted; } var A = ["green", "blue", "red"]; var B = [2, 1, 0]; var result = arrangeValues(A,B); console.log(result); 

簡單方法:

const A: Array<string> = ["green", "blue", "red"];
const B: Array<number> = [2, 1, 0];
const result: Array<string> = B.map((entry: number) => A[entry]);

現場示例:

 const A = ["green", "blue", "red"]; const B = [2, 1, 0]; const result = B.map((entry) => A[entry]); console.log(result); 

使用此方法的所有六個組合:

 const A = ["green", "blue", "red"]; function test(B) { const result = B.map((entry) => A[entry]); console.log(B.join(", "), "=>", result.join(", ")); } for (let i = 0; i < A.length; ++i) { for (let j = 0; j < A.length; ++j) { if (j != i) { for (let k = 0; k < A.length; ++k) { if (i != k && j != k) { test([i, j, k]); } } } } } 

按索引A對應的顏色映射到B對應的值並按它們排序:

const A = ['green', 'blue', 'red'];

const B = [2, 1, 0];

const sorted = A.sort((a,b) => {

    const [aV,bV] = [a,b].map((_,i) => B[i]);

    return aV - bV;

})

console.log(sorted);

或者,如果我們可以假設B包含索引,那么一個簡單的map就可以完成工作:

const A = ['green', 'blue', 'red'];

const B = [2, 1, 0];

const result = B.map(i => A[i]);

console.log(result);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM