[英]Javascript Sort array order based on another array order using underscore
[英]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.