簡體   English   中英

如何根據它們的值加入兩個 arrays

[英]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相應的值從輔助數組推送到主數組,並將其從輔助數組中刪除。

注意事項

  • 該算法的復雜度為 O(n^2),其中 n 是輔助數組中的元素數。 因此,對於巨大的 arrays,這可能會失控。
  • 如果多個項目具有相同的距離,則indexOfMinValue在其當前形式中產生具有最小距離的第一個元素。 可能需要隨機產生最后一個結果或 select 最小值之一或...

暫無
暫無

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

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