如何从一个对象创建一个字符串数组,其中各个键的值是单独的字符串数组?

时间:2017-05-24 11:02:12

标签: javascript angular typescript

我正在尝试收集CustodyKeys__notes对象中的所有错误,并将其填充到err中以显示它们。

this.errors对象

err

如您所见,err是一个对象,其中各个键的值是字符串数组。要将错误字符串收集到单独的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"] } 数组中,我只需执行:

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);
   });
 }

OR

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

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

并将其显示在我的模板中:

populateErrors(err, keys[]) {
    err.forEach(error => {
          this.errors.push(err.keys[1]);
    });
    //...
}

// and call it
populateErrors(err, ['name', 'rate', 'category'])

该功能可能是什么样的?

2 个答案:

答案 0 :(得分:2)

您可以使用map reduce



const 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"]
}

const arr = Object.keys(err)
  .map(k => err[k])
  .reduce((acumm, el) => acumm.concat(el), []);

console.log(arr)




我们正在组合Object.keys一个本机函数,该函数允许您使用mapreduce获取对象的键。

["name", "rate", "category"].map(...

map方法创建一个新数组,其结果是为每个数组元素调用一个函数。所以,我正在返回属性本身的价值。

[[ "Item name...", "Item name..." ], ["Item Rate...", "Item rate"], ["Item Category..."]].reduce(...

reduce方法将数组减少为单个值。所以我在一个数组中连接所有值。

答案 1 :(得分:0)

您可以使用map函数和属性上的循环:

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