有一個 JavaScript 陣列:
let arr=[
[220,A,12],
[560,B,5],
[300,A,0],
[300,H,3],
[300,K,T],
[450,P,9],
[500,E,6],
[500,M,8]
];
子陣列的第一個元素有一些重復的值,
我想找到它們并修改重復的值,如下:
[300,A,0], ===> remain unchanged
[300,H,3], ===> [320,H,3], //First element add 20
[300,K,T], ===> [340,K,T], //First element add 20 again
[500,E,6], ===> remain unchanged
[500,M,8] ===> [520,M,8] //First element add 20
也就是說,如果重復,第一個元素以適當的順序添加 20。
其他元素不需要考慮。
如何在javaScript中做到這一點?
uj5u.com熱心網友回復:
一種選擇是使用reduce. 我將一個物件作為初始值傳遞給reduce:
{
last: null, // The previous number encountered
offset: 20, // The amount to add on repeat
data: [] // The new array
}
然后,使用它來構建新陣列:
let arr=[
[220,'A',12],
[560,'B',5],
[300,'A',0],
[300,'H',3],
[300,'K','T'],
[450,'P',9],
[500,'E',6],
[500,'M',8]
];
arr = arr.reduce((prev, cur) => {
// Is this a repeat?
if (prev.last == cur[0]) {
cur[0] = prev.offset;
prev.offset = 20;
}
// Not a repeat. Reset.
else {
prev.last = cur[0];
prev.offset = 20;
}
prev.data.push(cur);
return prev;
}, {last: null, offset: 20, data: []}).data;
console.log(arr);
uj5u.com熱心網友回復:
使用映射鍵:值,其中鍵是數字,值是到目前為止的出現次數
let arr = [
[220, 12],
[560, 5],
[300, 0],
[300, 3],
[300, 0],
[450, 9],
[500, 6],
[500, 8]
];
m = {}
for (let i = 0; i < arr.length; i) {
const x = arr[i][0]
if (m[x] > 0){
arr[i][0] = (m[x]) *20
m[x]
} else m[x] = 1
}
console.log(arr)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/380004.html
標籤:javascript
