简体   繁体   English

如何循环思考 map 并创建特定的 object? 使用 Javascript

[英]How to loop thought map and create specific object ? Using Javascript

All code you can find here: https://stackblitz.com/edit/angular-display-show-json-in-propertlu-format?file=src%2Fapp%2Fapp.component.ts您可以在此处找到所有代码: https://stackblitz.com/edit/angular-display-show-json-in-propertlu-format?file=src%2Fapp%2Fapp.component.ts

I have a problem formatting the array I'm loop through.我在格式化循环遍历的数组时遇到问题。 Main logic function is this:主逻辑function是这样的:

this.allFilters.push(
  Array.isArray(val.value)
    ? {
        name: val.name,
        value: val.value.map((obj: any) => obj.value).join(" - "),
        displayName: val.displayName,
        displayValue: val.value.map((obj: any) => obj.value).join(" - ")
      }
    : {
        name: val.name,
        value: val.value,
        displayName: val.displayName,
        displayValue: val.displayValue
      }
);

Let me explain what I did here.让我解释一下我在这里做了什么。 Loop the thought array and push values.循环思想数组并推送值。 If it is array, the first condition goes, if it is not through, then the second.如果是数组,则第一个条件通过,如果未通过,则为第二个。

Example of allFilters and val you can see on stackblitz and code bellow. allFilters 和 val 的示例,您可以在 stackblitz 和下面的代码中看到。

I loop thought array very simple:我循环思想数组很简单:

  <span
    *ngFor="let filter of allFilters">
    {{ filter.displayName }}: {{ filter.displayValue }}
  </span>

If are you using VUE.js this is如果你使用 VUE.js,这是

  <span
    v-for="filter in allFilters" :key="filter.name>
    {{ filter.displayName }}: {{ filter.displayValue }}
  </span>

I need create object like a:我需要像这样创建 object :

 First: 2
  
 Second: dateFrom 2021-04-08
   
 Second: dateTo:  2021-04-20
  
 Third: 15

The issue is not connected out for vue or angular or even reactions.问题与 vue 或 angular 甚至反应无关。 This is js problem.这是js的问题。

No need for such remappings, displaying logic should be usually in template, something like:不需要这样的重新映射,显示逻辑通常应该在模板中,例如:

<span
*ngFor="let filter of allFilters"
class="badge badge-light my-3 mx-2 px-3 py-1">

<ng-container *ngIf="isArray(filter.value); else noArray">
  <div *ngFor="let obj of filter.displayValue">
    {{filter.displayName}}: {{obj.name}} {{obj.value}}
  </div>
</ng-container>

 <ng-template #noArray>
    {{filter.displayName}}: {{filter.displayValue}}
</ng-template>

</span>

js: js:

isArray(value) {
    return Array.isArray(value);
}

recieveMessage(val) {
    this.allFilters.push(val);
}

It is possible to do it in template, like this:可以在模板中执行此操作,如下所示:

<hello name="{{ name }}"></hello>
<div class="span">

  <span
    *ngFor="let filter of allFilters"
    class="badge badge-light my-3 mx-2 px-3 py-1"
  >
<ng-container *ngIf="filter.name != 'Second';else withDate">
 {{ filter.displayName }}: {{ filter.displayValue }}
  </ng-container>

  <ng-template #withDate>
  Second: dateFrom {{ filter.displayValue|slice:0:10 }}<br>
  Second: dateTo: {{ filter.displayValue|slice:13:24 }}
  </ng-template>


  </span>

</div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM