[英]What is the most efficient way to populate an array based on other information in Javascript?
[英]Javascript most efficient way to combine array elements with each other
我正在嘗試將字符串數組與唯一的組合(例如“ Mark | Tom”,但不包含“ Tom | Mark”)結合起來
我寫了這段代碼:
let arr = ['Tom', 'Danny', 'Mark'] let sets = [] for (let i = 0; i < arr.length; i++) { let others = arr.filter(name => name != arr[i]) others.forEach((other) => { let newel = arr[i] + '|' + other let test = newel.split('|') if (sets.includes(test[1] + '|' + test[0]) || sets.includes(newel)) return sets.push(newel) }) } console.log(sets)
這是遍歷每個數組元素,然后從基本數組創建其他元素的另一個數組,然后遍歷它們(再次迭代),創建一個組合,檢查我們的元素是否存在反向組合(如果這是在先前的循環中創建的)如果沒有這樣的組合=將其推入目標數組。
有沒有更優雅的方式來完成這項任務?
這個如何:
const arr = ['Tom', 'Danny', 'Mark']; const sets = []; for (let i = 0; i < arr.length; i++) { for (let j = i + 1; j < arr.length; j++) { sets.push(arr[i] + '|' + arr[j]); } } console.log(sets);
您也可以在開始計算之前使arr
唯一:
const arr = [...new Set(['Tom', 'Danny', 'Mark', 'Tom'])]; // ['Tom', 'Danny', 'Mark']
我會將您的數組設為一個集合,這樣一來,它將像這樣刪除所有重復項:
new Set(['Tom', 'Danny', 'Mark']);
現在,您可以使用.flatMap
和.flatMap
.reduce
n th
i th
元素與所有元素配對直到i th
n th
元素,如下所示:
const name_arr = Array.from(new Set(['Tom', 'Danny', 'Mark'])); const res = name_arr.flatMap( (name, i) => name_arr.slice(i+1).reduce((a, n) => [...a, name+'|'+n],[]) ); console.log(res);
您可以創建一個傳遞數組的集合,遍歷該數組,為每個索引獲取該索引之后的數組,然后循環遍歷另一個數組並構建組合
let arr = ['Tom', 'Danny', 'Mark'] const uniqueCombo = (arr) => { let newSet = [...new Set(arr)] return newSet.reduce((op, inp, index) => { newSet.slice(index + 1,).forEach(v => { op.push(inp + '|' + v) }) return op },[]) } console.log(uniqueCombo(arr)) console.log(uniqueCombo(['A', 'B', 'A', 'C', 'D'])) console.log(uniqueCombo(['A', 'B', 'A', 'C']))
試試這個。 這種方法可以過濾掉以前用於將項目推入數組的索引。
const arr = ['Tom', 'Danny', 'Mark']; const comb = []; for (let i = 0; i < arr.length; i++) { for (j = i + 1; j < arr.length; j++) { comb.push(arr[i] + '|' + arr[j]); } } console.log(comb);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.