javascript - 并发数组函数

我有一个函数,它接受一个包含数字字符串的 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))

相似文章

最新文章