Javascript 如何在Array.reduce()中返回null?

Javascript 如何在Array.reduce()中返回null?,javascript,arrays,Javascript,Arrays,我有一个数组,看起来像这样。它是一个动态长度的数组,包含字符串或对象 ['h', 'e', {apple: 2}, 'l', 'p'] 我需要把它变成这样: [null, null, 'apple', 'apple', null, null] 所以我尝试使用reduce方法,并从将字符串转换为null开始 .reduce( (acc: Array<null | string>, val) => { if (typeof val === &quo

我有一个数组,看起来像这样。它是一个动态长度的数组,包含字符串或对象

['h', 'e', {apple: 2}, 'l', 'p']
我需要把它变成这样:

 [null, null, 'apple', 'apple', null, null]
所以我尝试使用reduce方法,并从将字符串转换为null开始

.reduce(
      (acc: Array<null | string>, val) => {
        if (typeof val === "string") return acc.concat(null);
        
        return acc.concat(val)
      },
      []
    );
我期望:

[null, null, {apple: 2}, null, null]
性能是相当重要的,是否可以这样做,只在阵列上循环一次,而不产生for循环

编辑:对不起,我犯了一个愚蠢的错误,好像我的库把它变成了[he,{apple:3},lp]。

你可以使用Array.prototype.flatMap-

常量进程=t=[]=> t、 平面图 v=> Objectv==v ? 对象 .entriesv .flatMap[s,n]=>Arrayn.fills :[null] 常数数据= ['h','e',{apple:2},'l','p'] 常数结果= 过程数据 console.logJSON.stringifyresult //[零,零,苹果,苹果,零,零]那个

常量arr=['h','e',{apple:2},'l','p'] 常数rep=arr.reducea,c=> { 如果对象的c实例 { 让pair=Object.entriesc[0]
对于let n=0;nI无法重现问题:您应该使用map来达到[null,null,{apple:2},null,null],而不是reduce.@hev1 oops!!我刚刚注意到我的库正在将其转换为一个连接到{apple:3}的帮助字符串混合在数组中,因为我使用了两个数组而感到困惑。我太蠢了!@Bergi我不能用map添加额外的项目,{apple:3}需要变成'apple',apple',apple'@zakaria是的,你应该使用flatMap,但是你的问题让人困惑,因为有一点你说我期望:[null,null,{apple:2},null,null]另一次你说我需要把它变成这样:[null,null,'apple','apple',null,null],我只是指前者,因为你的代码似乎甚至没有试图实现后者。
[null, null, {apple: 2}, null, null]