如何在完全没有concat的情况下处理每个数据,然后是动态的?Javascript,映射

如何在完全没有concat的情况下处理每个数据,然后是动态的?Javascript,映射,javascript,typescript,Javascript,Typescript,我需要动态显示结果。问题是,我只是在对象的第一个和第二个元素处进行连接,我必须通过一些循环或动态地进行连接 代码如下: 在stackblitz中,您将看到问题被写入 this.allFilters.map(filerVal => { if (Array.isArray(filerVal.value)) filerVal.value = `${filerVal.value[0]?.value} : ${(filerVal.value[1]?.value ?

我需要动态显示结果。问题是,我只是在对象的第一个和第二个元素处进行连接,我必须通过一些循环或动态地进行连接

代码如下:

在stackblitz中,您将看到问题被写入

   this.allFilters.map(filerVal => {
     if (Array.isArray(filerVal.value)) 
       filerVal.value = `${filerVal.value[0]?.value} : ${(filerVal.value[1]?.value ? filerVal.value[1]?.value : '')}`
       return filerVal;
      }); 
这是一个问题:

 filerVal.value = `${filerVal.value[0]?.value} : ${(filerVal.value[1]?.value ? filerVal.value[1]?.value : '')}`
我是concat字符串的第一个和第二个元素,但在我的数组中有四个元素。。。如何显示所有数据

预期结果将是:

1:2:3:4

十五

1:2:3:4

现在是:

1:2(缺少3和4)

十五

1:2(缺少3和4)

试试这个:

  recieveMessage(data) {
    this.allFilters.push(Array.isArray(data.value) ?
          data.value.map(obj => obj.value).join(":")
          : data.value)
  }

我知道这就是你期望的结果


Forked Stackblitz:

.map()
用于转换数组中的每个项目。因此,它必须始终返回一个值。如果您对转换数组中的每个项不感兴趣,请不要使用
.map()
。您可能需要
.forEach()
,或者更好的是,当我使用forEach时,为循环使用
(更好,因为它可以被中断),它也会这样做。对我来说,重要的是如何格式化我合并的字符串,它需要一个循环还是什么?主要问题是您正在用这一行覆盖
filterVale.value
filerVal.value=${filerVal.value[0]?.value}:${(filerVal.value[1]?.value?filerVal.value[1]?.value
在第一次传递中,
filerVal.value
不再是一个项目数组,变成了
'1:2'
然后
filerVal.value.value
就不存在了。@MichaelHoobler是的,这是真的。如何修复它?我想他们需要空格:“,对吗?这没关系,但对我来说这是不同的…我在我的this.allfilters中有两个对象…我不知道如何。Stackblitz只是演示外观,但在我的代码中这工作不同…不知道如何?我已经分叉了你的Stackblitz,并在我的回答中添加了指向它的链接Stackblitz是相同的。在我的代码中,我有两个对象,像一个0:{name:“一”,值:2}1:2秒的对象是1:2Ah是的对不起,我把你的Stackblitz分叉了,但它没有保留我的更改。我已经更新了它,看一看
  <span *ngFor="let filter of allFilters">
                 {{ filter }} 
 </span>
1:2:3
15
1:2:3:4