我有一個函式,它接受一個包含數字字串的子陣列陣列,并從每個子陣列中回傳一個數字最大的陣列:
const largestOfFour = arr => {
arr.map(e => {
e.sort((a,b) => b - a).splice(1);
});
return arr.flat();
}
它以上面格式化的方式完美地作業,但如果它用傳入的陣列上的并發函式格式化,它就不起作用了。像這樣:
const largestOfFour = arr => {
return arr.map(e => {
e.sort((a,b) => b - a).splice(1);
}).flat();
}
在該格式中,它回傳一個適當長度的陣列,但每個元素都是空的。誰能幫我理解為什么會這樣?將并發函式鏈接到陣列上通常沒有問題。
uj5u.com熱心網友回復:
JavaScript 中沒有并發。但是您的map回呼不回傳任何內容(return陳述句塊中沒有),因此.map()回傳一個未定義值的陣列。
為避免原始資料發生變異,我還將避免在sort原始陣列上使用 ,而slice使用splice.
但是由于您只需要每個陣列中的一個值,您甚至不需要slice:只需獲取索引 0 處的值(flat不必要):
let a = [
["1", "2", "3"],
["4", "5", "6"]
];
const largestOfFour = arr =>
arr.map(e =>
[...e].sort((a, b) => b - a)[0]
);
console.log(largestOfFour(a));
或者更好的是,只需使用Math.max,這也可以轉換為數字:
let a = [
["1", "2", "3"],
["4", "5", "6"]
];
const largestOfFour = arr => arr.map(e => Math.max(...e));
console.log(largestOfFour(a));
uj5u.com熱心網友回復:
內部塊(在地圖中)沒有回傳任何內容,從而導致一個未定義的陣列。在片段中修復...
let a = [
["1", "2", "3"],
["4", "5", "6"]
]
const largestOfFour = arr => {
return arr.map(e => {
return e.sort((a, b) => b - a)[0];
}).flat();
}
console.log(largestOfFour(a))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/477458.html
標籤:javascript 数组 算法 array.prototype.map 子阵列
