[英]Check if some elements of array are equal
我只發現了一個問題“如果所有元素都相等”。 它不適合我,我還需要另一件事:掃描數組並獲取相等的元素,然后將其推入另一個數組。
輸入樣例:
arr = [1, 3, 3, 1]
樣本輸出:
group = [[1,1],[3,3]]
這是我的代碼:
arr = [1, 3, 3, 1];
group = [];
pickNums = (a,b) => {
... ? group.push([a]) : null
arr.reduce(pickNums);
而且我不知道寫什么而不是“ ...”。 你有什么想法?
您可以制作一個Map
並將所有值分組在同一組中。
var array = [1, 3, 3, 1], groups = Array.from( array .reduce((m, v) => m.set(v, [...(m.get(v) || []), v]), new Map) .values() ); console.log(groups);
使用Array.reduce()
將項目收集到字典中,然后使用Object.values()
轉換回數組:
const arr = [1, 3, 3, 1]; pickNums = (arr) => Object.values(arr.reduce((r, n) => { r[n] = r[n] || []; r[n].push(n); return r; }, {})); const groups = pickNums(arr); console.log(groups);
這樣的聲音可以通過使用Object / Hash保留相似元素的計數器來最佳解決。
const array = [1, 3, 3, 1];
const elementCounterObject = {};
array.map(element => {
if (!elementCounterObject[element]) {
elementCounterObject[element] = 1;
} else {
elementCounterObject[element] += 1;
}
});
console.log(elementCounterObject); // result: {1: 2, 3: 2}
// converting elementCounterObject to display output as per requirement
const resultingArrayToDisplay = [];
for (let element in elementCounterObject) {
const numberOfInstances = elementCounterObject[element];
const elementToNumberOfInstanceArray = new Array(numberOfInstances).fill(parseInt(element));
resultingArrayToDisplay.push(elementToNumberOfInstanceArray);
};
console.log(resultingArrayToDisplay); // result: [[1,1], [3,3]]
我將此代碼段設為冗長的,以便您可以了解其背后的算法。 顯然可以將一些絨毛刮掉以使其簡潔,但我希望這可以解決您的查詢
這就是你想要的:
const arr = [1, 3, 3, 1];
let groups = [];
arr.map((item)=>{
const ar2 = arr.filter( sec => sec == item );
if (! groups.filter( sec => sec.indexOf(item)>-1).length) {
groups.push(ar2);
}
});
console.log(groups);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.