并发数组函数
Concurrent Array Functions
我有一个函数,它接受一个包含数字字符串的子数组数组和 returns 每个子数组中具有最大数字的数组:
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();
}
在该格式中,它 returns 一个适当长度的数组,但每个元素都是空的。谁能帮我理解这是为什么?我通常不会遇到将并发函数链接到数组上的问题。
内部块(在地图中)未返回任何内容,导致未定义数组。已在代码段中修复...
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))
JavaScript 中没有并发。但是你的 map
回调没有 return 任何东西(语句块中没有 return
)所以 .map()
return 是一个未定义值的数组。
为了避免原始数据发生变异,我也会避免在原始数组上使用 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));
我有一个函数,它接受一个包含数字字符串的子数组数组和 returns 每个子数组中具有最大数字的数组:
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();
}
在该格式中,它 returns 一个适当长度的数组,但每个元素都是空的。谁能帮我理解这是为什么?我通常不会遇到将并发函数链接到数组上的问题。
内部块(在地图中)未返回任何内容,导致未定义数组。已在代码段中修复...
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))
JavaScript 中没有并发。但是你的 map
回调没有 return 任何东西(语句块中没有 return
)所以 .map()
return 是一个未定义值的数组。
为了避免原始数据发生变异,我也会避免在原始数组上使用 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));