我有一个函数,它接受一个包含数字字符串的 sub-arrays 数组,并返回每个 sub-array 中数字最大的数组:
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();
}
在该格式中,它返回一个适当长度的数组,但每个元素都是空的。谁能帮我理解为什么会这样?将并发函数链接到数组上通常没有问题。
回答1
JavaScript 中没有并发。但是您的 map
回调不返回任何内容(语句块中没有 return
),因此 .map()
返回一个未定义的 values 数组。
为避免原始数据发生变异,我还将避免在原始数组上使用 sort
,并使用 slice
而不是 splice
。
但是由于您只需要每个数组中的一个 value,您甚至不需要 slice
:只需在索引 0 处获取 value(使 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));
回答2
内部块(在 map 中)不返回任何内容,从而导致未定义的数组。在片段中修复...
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))