我正在嘗試用另一個陣列更新一個陣列。第二個陣列是動態的,關鍵是唯一會改變的東西。元素的順序或索引不重要(不是順序的)
arrayA = [
{name: 'John Doe', sport: 'soccer', point: 20},
{name: 'Jack Kim', sport: 'tennis', point: 10},
{name: 'Tiger Wood', sport: 'golf', point: 22},
{name: 'Lewis Hamilton', sport: 'F1', point: 30},
]
arrayB 可能是另一個點值,可能是全部或一次。
arrayB = [
{name: 'John Doe', sport: 'soccer', point: 50},
{name: 'Jack Kim', sport: 'tennis', point: 100},
]
無論發生什么,新陣列都會查找這個。
newArray = [
{name: 'John Doe', sport: 'soccer', point: 50},
{name: 'Jack Kim', sport: 'tennis', point: 100},
{name: 'Tiger Wood', sport: 'golf', point: 22},
{name: 'Lewis Hamilton', sport: 'F1', point: 30}]
我正在嘗試通過 ArrayB 更新 arrayA,因為它們的索引可能并不總是相同。我正在考慮使用 .slice 洗掉匹配的位置,然后完全推送 arrayB。我認為這可能是一個糟糕的編程想法。我正在尋找如何優化這種方法。
注意:這更像是一種解釋我想做什么的演算法。我還沒有測驗過,但我知道應該有一個簡單的方法來解決這個問題。
let newArray = [];
arrayA.map(v => {
if(v.sport === arrayB.sport) {
index = arrayA.findIndex(v.sport)
arrayA.slice(index);
newArray = arrayA;
}
});
newArray.push(arrayB)
uj5u.com熱心網友回復:
您可以映射第一個陣列,使用第二個陣列中玩家的點(如果找到它們),并默認為原始點:
const arrayA = [
{name: 'John Doe', sport: 'soccer', point: 20},
{name: 'Jack Kim', sport: 'tennis', point: 10},
{name: 'Tiger Wood', sport: 'golf', point: 22},
{name: 'Lewis Hamilton', sport: 'F1', point: 30},
]
const arrayB = [
{name: 'John Doe', sport: 'soccer', point: 50},
{name: 'Jack Kim', sport: 'tennis', point: 100},
]
const result = arrayA.map(({ name, sport, point }) => ({
name, sport,
point: arrayB.find((p) => p.name === name && p.sport === sport)?.point ?? point,
}));
console.log(result);
可能奇怪的語法參考:
?.-可選鏈接??-無效合并{ name, sport, point }-解構
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/527364.html
