Javascript 如何从单个键的值是单独字符串数组的对象创建字符串数组?

Javascript 如何从单个键的值是单独字符串数组的对象创建字符串数组?,javascript,angular,typescript,Javascript,Angular,Typescript,我试图收集err对象中的所有错误,并将它们填充到this.errors中以显示它们 错误对象: err = { "name": [ "Item name is required.", "Item name must be at least 4 chars" ], "rate": [ "Item Rate is should be a number.", "Item rate should be between 10 and 1000" ], "

我试图收集
err
对象中的所有错误,并将它们填充到
this.errors
中以显示它们

错误
对象

err = {
  "name": [
    "Item name is required.",
    "Item name must be at least 4 chars"
  ],
  "rate": [
    "Item Rate is should be a number.",
    "Item rate should be between 10 and 1000"
  ],
  "category": ["Item Category is required"]
}
如您所见,err是一个对象,其中各个键的值是字符串数组。要将错误字符串收集到单独的
this.errors
数组中,我只需执行以下操作:

 if (err && err.number)  {
   err.number.forEach(e => {
     this.errors.push(e);
   });
 }

if (err && err.number)  {
   err.rate.forEach(e => {
     this.errors.push(e);
   });
 }

 if (err && err.number)  {
   err.category.forEach(e => {
     this.errors.push(e);
   });
 }
但我需要在我的应用程序的许多地方重复这些代码行

我想将这些代码放在functionl中,如下所示:

populateErrors(err) {
    err.forEach(error => {
          this.errors.push(error);
    });
}

// and call it
this.populateErrors(err);

并在我的模板中显示它们:

<div class="row" *ngIf="errors && errors.length">
    <div class="col-md-12">
        <div class="alert alert-danger alert-dismissible">
                <a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>
                <ol *ngFor="let err of errMsg">
                    <li>{{ err }}</li>
                </ol>
        </div>
    </div>
</div>

  • {{err}}

  • 该函数可能是什么样的?

    您可以使用映射函数,并在属性上进行循环:

    for (let prop in this.err) {
        this.errors = this.errors.join(
            this.err[prop].map(el => ({el}));
        );
    }
    

    可以使用映射函数,并在属性上使用循环:

    for (let prop in this.err) {
        this.errors = this.errors.join(
            this.err[prop].map(el => ({el}));
        );
    }
    

    您可以使用
    映射
    减少

    const err={
    “姓名”:[
    “项目名称为必填项。”,
    “项目名称必须至少为4个字符”
    ],
    “费率”:[
    “项目费率应为数字。”,
    “项目费率应介于10和1000之间”
    ],
    “类别”:[“需要项目类别”]
    }
    const arr=Object.keys(错误)
    .map(k=>err[k])
    .reduce((acumm,el)=>acumm.concat(el),[]);
    
    console.log(arr)
    您可以使用
    映射
    减少

    const err={
    “姓名”:[
    “项目名称为必填项。”,
    “项目名称必须至少为4个字符”
    ],
    “费率”:[
    “项目费率应为数字。”,
    “项目费率应介于10和1000之间”
    ],
    “类别”:[“需要项目类别”]
    }
    const arr=Object.keys(错误)
    .map(k=>err[k])
    .reduce((acumm,el)=>acumm.concat(el),[]);
    
    console.log(arr)
    这是一个单行解决方案,工作起来很有魅力。如果你有时间的话,你能简单地解释一下吗?非常感谢,伙计。@如果我的解释不太清楚,我很抱歉。问你想要什么。这是一个单行的解决方案,效果很好。如果你有时间的话,你能简单地解释一下吗?非常感谢,伙计。@如果我的解释不太清楚,我很抱歉。问你想要什么。