我有一個2D陣列:
var arr1 = [["埃及", "Grid",50],["Egypt","Grid",10] 。 ["尼日利亞","網格",20], ["加納", "Grid",60],["埃及","Grid",30]
我想檢查每個陣列的第一個元素,例如埃及、尼日利亞和加納,看看它們是否是重復的。但是我只想讓它檢查下一個元素,而不是檢查陣列中的所有元素。如果一個或多個元素彼此重復,我想回傳一個陣列,將位置2的元素相加(50,10,20,60,30)
這樣做的結果應該是:
var arr2 = [["埃及", "Grid",60], ["Nigeria", "Grid",20], ["Ghana","Grid", 60]],["埃及","網格",30]
請注意,盡管有3個帶有 "埃及 "的陣列,但它只結合了它們彼此相鄰的地方。
我已經嘗試了map和for loop,但是沒有任何接近作業的方法。這就是我開始使用的方法:
arr1.map(function (unit, index, array) {
var length = array.length
if (index < length - 2) {
var next = array[index 1] [0]
if (unit[0] == next) {
}
}
})
這樣做可以檢查元素是否重復。我想接下來我需要將重復的元素放入一個單獨的陣列中,然后我可以reduce,但我不確定如何做到這一點。如果能幫我指出正確的方向,那就太好了。謝謝!
uj5u.com熱心網友回復:
你可以使用一個簡單的for回圈遍歷每個陣列,除了最后一個,并檢查當前遍歷的元素的第一個元素是否與當前 1的第一個元素匹配。
如果它們匹配,將每個元素的第三個元素相加并分配給當前迭代的陣列,洗掉current 1(這里使用splice())并遞減i以再次重新檢查同一索引。
var arr1 = [
['Egypt', 'Grid', 50] 。
['Egypt', 'Grid', 10] 。
['Nigeria', 'Grid', 20] 。
['Ghana', 'Grid', 60] 。
['Egypt', 'Grid', 30] 。
];
for (let i = 0; i < arr1.length - 1; i ) {
if (arr1[i][0] === arr1[i 1] [0] ) {
arr1[i][2] = arr1[i][2] arr1[i 1] [2] 。
arr1.splice(i 1, 1) 。
i--;
}
}
console.log(arr1);
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
uj5u.com熱心網友回復:
你可以創建一個grouping陣列,在這個陣列中,只有當最后一個elments country和category與grouping陣列中的最后一個元素不匹配時,或者在grouping中沒有元素時,你才推送這個元素。
你可以使用for...of回圈
var arr1 = [
["埃及", "網格", 50]。
["Egypt", "Grid", 10] 。
["Nigeria", "Grid", 20] 。
["Ghana", "Grid", 60] 。
["埃及", "網格", 30] 。
];
const grouping = [];
for (let [ country, category, num] of arr1) {
const last = grouping[grouping.length - 1] 。
const [lastCountry, lastCategory, lastNum] = last ? [];
lastCountry && lastCountry === country && lastCategory === category
? (last[2] = num)
: grouping.push([country, category, num])。
}
console.log(grouping);
/* This is not a part of answer. 它只是為了給輸出填充高度。所以請忽略它 */
.as-console-wrapper { max-height: 100% ! important; top: 0; }
<iframe name="sif2" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
uj5u.com熱心網友回復:
這里是一個使用reduce的解決方案。為了簡化解構,我選擇先將結果預存到累加器中,然后用reverse將結果反轉:
let arr = [["Egypt", "Grid",60], ["Nigeria", "Grid",20], ["Ghana","Grid", 60],["埃及","網格",30]。
let result = arr.slice(1) 。 reduce(([[x, y, z], ...acc], [a, b, c]/span>) =>
a === x && b === y ? [[a, b, z c], ...acc] 。
: [[a, b, c], [x, y, z], ...acc] : [[a, b, c], [x, y, z], ... acc]
0]].reverse()。
console.log(result);
<iframe name="sif3" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
uj5u.com熱心網友回復:
var arr1 = [
["Egypt","Grid",50] 。
["Egypt","Grid",10] 。
["Egypt","Grid",10] 。
["Nigeria","Grid",20] 。
["Nigeria","Grid",20] 。
["Nigeria","Grid",20] 。
["Nigeria","Grid",20] 。
["Nigeria","Grid",20] 。
["加納","網格",60]。
["埃及","網格",30].
];
var i=0;
var j=1;
while (j<arr1.length){
if (arr1[i][0] === arr1[j][0] ){
arr1[i][2] = arr1[j][2] 。
arr1.splice(j,1)。
繼續。
}
i ;
j ;
}
console.log(arr1)
<iframe name="sif4" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/328622.html
標籤:
上一篇:如何生成隨機概率分布julia
