我目前在計算陣列中最大值與其他值之間的距離時遇到問題。基本上我想創建一個新陣列,其中的值將是與最大值的距離。我的意思是:
例子
我有一個物件陣列:
var array = [
{
id: 1,
value: 20,
},
{
id: 2,
value: 10,
},
{
id: 3,
value: 10,
},
{
id: 4,
value: 3,
},
{
id: 5,
value: 2,
},
];
}]
我希望這個新演算法的結果是這樣的:
結果
var newArray = [0, 1, 1, 2, 3]
原因是最大值與我們擁有的其他值之間的距離。相同的值需要具有相同的距離。最大值是 20,所以它需要有 0 作為結果,10 是第二個值,它距離最大值有 1 距離,依此類推。
我應該怎么做才能開始做這件事?
uj5u.com熱心網友回復:
如果您的陣列已經排序:
var array = [
{
id: 1,
value: 20,
},
{
id: 2,
value: 10,
},
{
id: 3,
value: 10,
},
{
id: 4,
value: 3,
},
{
id: 5,
value: 2,
},
];
const order = new Set(array.map(el => el.value))
const res = array.map(el => [...order].indexOf(el.value))
console.log(res)
如果您需要在之前對陣列進行排序:
var array = [
{
id: 1,
value: 10,
},
{
id: 2,
value: 10,
},
{
id: 3,
value: 20,
},
{
id: 4,
value: 3,
},
{
id: 5,
value: 2,
},
];
const sortedArray = array.sort((a,b) => a.value >= b.value ? -1 : 1)
const order = new Set(sortedArray.map(el => el.value))
const res = sortedArray.map(el => [...order].indexOf(el.value))
console.log(res)
uj5u.com熱心網友回復:
- 創建一個只有唯一值的陣列,從高到低排序
- 映射
array并從第 1 步獲取陣列中該值的索引
var array = [{id: 1, value: 20, }, {id: 2, value: 10, }, {id: 3, value: 10, }, {id: 4, value: 3, }, {id: 5, value: 2, }, ];
var vals = array.map(a => a.value)
.filter((v, i, s) => s.indexOf(v) === i)
.sort((a, b) => b - a);
var res = array.map(v => vals.indexOf(v.value));
console.log(res); // [0, 1, 1, 2, 3]
uj5u.com熱心網友回復:
這個不關心陣列最初是否排序;因為它首先對淺拷貝進行排序。
const positions = (xs, ys = [...xs] .sort ((a, b) => b .value - a .value)) =>
xs .map (x => ys .findIndex (y => x .value == y.value))
const array1 = [{id: 1, value: 20}, {id: 2, value: 10}, {id: 3, value: 10}, {id: 4, value: 3}, {id: 5, value: 2}]
const array2 = [{id: 1, value: 10}, {id: 2, value: 10}, {id: 3, value: 20}, {id: 4, value: 3}, {id: 5, value: 2}]
console .log (positions (array1))
console .log (positions (array2))
然后我們所做的就是映射我們的輸入以找到排序版本中第一個具有相同value.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/505863.html
標籤:javascript 数组 算法 排序
上一篇:如何實作“安全”的密碼插入?
