我有兩個陣列:
- 陣列 1 :
[{name: "Darin", id: "123"}, {name: "Mads", id: "345"}, {name: "Kenneth", id: "543"}, {name: "June", id: "567"}, {name: "June (1)", id: "789"}] - 陣列 2 :
[{name: "Darin", id: "910"}, {name: "June", id: "911"}, {name: "Simon", id: "912"}, {name: "Justin", id: "913"}]
我想要的輸出如下:
[{name: "Darin", id: "123"}, {name: "Mads", id: "345"}, {name: "Kenneth", id: "543"}, {name: "June", id: "567"}, {name: "June (1)", id: "789"}, {name: "Darin (1)", id: "910"}, {name: "June (2)", id: "911"}, {name: "Simon", id: "912"}, {name: "Justin", id: "913"}]
如您所見,我有以下規則:
- 陣列 2 應該是我后綴 (...num) 的唯一陣列
- 最終的重復應該用 (number) 后綴,其中數字遞增,直到該值在連接陣列中變得唯一
我不確定從哪里開始才能實作上述目標。我可以看到用一堆回圈和一個遞回函式解決了這個問題 - 但實際上,這是低效的。
我可以看到 Javascript ES6 提供了一些“更新”的方法,可以在這種情況下提供方便 - 特別是map 和 set。
因此,我的問題旨在了解如何實作上述目標,同時注意時間復雜度。
uj5u.com熱心網友回復:
使用 Array.map 和一個計數器物件來跟蹤每個名稱已經出現的次數:
var input1 = [{name: "Darin", id: "123"}, {name: "Mads", id: "345"}, {name: "Kenneth", id: "543"}, {name: "June", id: "567"}, {name: "June (1)", id: "789"}];
var input2 = [{name: "Darin", id: "910"}, {name: "June", id: "911"}, {name: "Simon", id: "912"}, {name: "Justin", id: "913"}];
var counter = {};
var combined = input1.concat(input2).map(function(e) {
var strippedName = e.name.replace(/ \([0-9] \)/, '');
counter[strippedName] = counter[strippedName] == undefined ? 0 : counter[strippedName] 1;
e.name = strippedName (counter[strippedName] ? ' (' counter[strippedName] ')' : '');
return e;
});
console.log(combined);
uj5u.com熱心網友回復:
您可以通過分隔字串來計算名稱。
const
array1 = ["Darin", "Mads", "Kenneth", "June", "June (1)"],
array2 = ["Darin", "June", "Simon", "Justin"],
counts = {},
result = [array1, array2].reduce((r, a) => {
a.forEach(v => {
const [, name, , count = 0] = v.match(/^(\w*)(\s\((\d )\))?$/);
if (name in counts && count === 0) counts[name];
else counts[name] = count;
r.push(counts[name] ? `${name} (${counts[name]})` : name);
});
return r;
}, []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/324821.html
標籤:javascript 数组
下一篇:從位元組陣列中獲取正確格式的字串
