[英]How to join two arrays according to their values
我有以下 arrays:
var main_arr = [[54.5,225.5], [45.25,15.54], [1.5, 22.3]];
var sec_arr = [[1.51, 22.35], [54.32,32.54], [4.56,45.45]];
我想獲取第一個數組的最后一個元素,並通過第二個數組中的值找到最接近的元素。
然后我希望將找到的元素推入主數組並從輔助數組中刪除。 我希望它重復,直到輔助數組中沒有元素。
結果應如下所示:
[[54.5,225.5], [45.25,15.54], [1.5, 22.3], [1.51, 22.35], [4.56,45.45], [54.32,32.54]]
如何在沒有任何框架的情況下使用純 JavaScript 來做到這一點?
編輯:
我不確定我是否解釋得足夠好,所以我會給你一個更簡單的版本。 您有一個主要和一個輔助數字數組。 您無法重新排序主目錄中的任何內容。
var main = [1, 5, 4, 3, 7];
var secondary = [9, 3, 4, 0, 5];
我想獲取最接近主數組最后一個元素的數字並將其推送到它。 然后應該重復它,直到輔助數組中沒有元素。 結果應如下所示:
var main = [1, 5, 4, 3, 7, 9, 5, 4, 3, 0];
var secondary = [];
我將先給出一個代碼示例,稍后再詳細說明:
let main = [1, 5, 4, 3, 7];
let secondary = [9, 3, 4 0, 5];
for (var i = secondary.length; i > 0; i--) {
const lastElement = main[main.length-1];
const distance = secondary.map(item => calculateDistance(item, lastElement));
const index = indexOfMinValue(distance);
main.push(secondary[index]);
secondary.splice(index, 1);
}
function calculateDistance(item, lastElement) {
// calculate the distance (e.g. (x1-x2)^2 + (y1-y2)^2)
}
function indexOfMinValue(distance) {
return distance.reduce((iMin, x, i, arr) => x < arr[iMin] ? i : iMin, Number.POSITIVE_INFINITY);
}
由於您在每次迭代中從輔助數組中僅移動一個項目,因此您必須迭代輔助數組的長度(您不能使用for (var i = 0; i < secondary.length; i++)
,因為長度會在每次迭代。
然后,您必須計算所有元素相對於主數組的最后一個元素的距離。 對於單純的數字,您只需對點進行簡單的比較abs(lastElement - currentElement)
就必須使用評論中建議的公式。
這樣,您將獲得一個數組,其中包含您必須從中找到最小值的當前距離。 在第一次迭代的給定示例中,距離數組如下所示:
distance = [2, 4, 3, 7, 2];
indexOfMinValue
-函數(取自this answer )產生具有最小距離的元素的索引(本例中的第一個)。 使用該索引,您可以push
相應的值從輔助數組推送到主數組,並將其從輔助數組中刪除。
indexOfMinValue
在其當前形式中產生具有最小距離的第一個元素。 可能需要隨機產生最后一個結果或 select 最小值之一或...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.