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]