ES6如何在javascript中将键、值对递归转换为字符串?

ES6如何在javascript中将键、值对递归转换为字符串?,javascript,loops,ecmascript-6,key-value,Javascript,Loops,Ecmascript 6,Key Value,我尝试插入错误消息,因为我需要一种特殊的文本格式。 现在做这件事的最佳做法是什么:) 谢谢你的帮助 期望的结果: Password longer then 5 chars \n Email has invalid format \n let data = { "errors": [ { "password": "must min have 5 characters" }, { "email": "has invalid format"

我尝试插入错误消息,因为我需要一种特殊的文本格式。 现在做这件事的最佳做法是什么:) 谢谢你的帮助

期望的结果:

Password longer then 5 chars \n
Email has invalid format \n
let data = {
  "errors": [
    {
      "password": "must min have 5 characters"
    },
    {
      "email": "has invalid format"
    }
  ]
}
let res = data.errors.map(function(error, index) {
  let keyName = Object.keys(error)
  let str = error[keyName]
  return keyName + " " + str ;
});

console.log(res.join("\n"));
来源:

Password longer then 5 chars \n
Email has invalid format \n
let data = {
  "errors": [
    {
      "password": "must min have 5 characters"
    },
    {
      "email": "has invalid format"
    }
  ]
}
let res = data.errors.map(function(error, index) {
  let keyName = Object.keys(error)
  let str = error[keyName]
  return keyName + " " + str ;
});

console.log(res.join("\n"));
可能的解决方案:

Password longer then 5 chars \n
Email has invalid format \n
let data = {
  "errors": [
    {
      "password": "must min have 5 characters"
    },
    {
      "email": "has invalid format"
    }
  ]
}
let res = data.errors.map(function(error, index) {
  let keyName = Object.keys(error)
  let str = error[keyName]
  return keyName + " " + str ;
});

console.log(res.join("\n"));
像这样的

data.errors.map(error => Object.keys(error).map(key => `${key} ${error[key]}`)).join('\n');

请注意,ES6函数非常慢(至少在nodejs上是如此),因此我仍然会使用ES5函数,如

var res = '';
for (let i = 0; i < data.errors.length; i++) {
  var key = Object.keys(data.errors[i])[0];
  res += key + ' ' + data.errors[i][key] + '/n';
}
测试:

"use strict";
var Benchmark = require('benchmark');
var suite = new Benchmark.Suite;

suite
.add('map', function() {
let data = {
  "errors": [
    {
      "password": "must min have 5 characters"
    },
    {
      "email": "has invalid format"
    }
  ]
}

let res = data.errors.map(function(error, index) {
  let keyName = Object.keys(error)
  let str = error[keyName]
  return keyName + " " + str ;
});
res = res.join("\n");
})
.add('maxx answer', function() {
let data = {
  "errors": [
    {
      "password": "must min have 5 characters"
    },
    {
      "email": "has invalid format"
    }
  ]
}
data.errors.map(error => Object.keys(error).map(key => `${key} ${error[key]}`)).join('\n');

})
.add('for keys', function() {
let data = {
  "errors": [
    {
      "password": "must min have 5 characters"
    },
    {
      "email": "has invalid format"
    }
  ]
}

var res = '';
for (let i = 0; i < data.errors.length; i++) {
  var key = Object.keys(data.errors[i])[0];
  res += key + ' ' + data.errors[i][key] + '/n';
}
})
// add listeners
.on('cycle', function(event) {
  console.log(String(event.target));
})
.on('complete', function() {
  console.log('Fastest is ' + this.filter('fastest').map('name'));
})
// run async
.run({ 'async': true });
“严格使用”;
var基准=要求(“基准”);
var-suite=新的Benchmark.suite;
一套
.add('map',function()){
让数据={
“错误”:[
{
“密码”:“必须至少有5个字符”
},
{
“电子邮件”:“格式无效”
}
]
}
设res=data.errors.map(函数(错误,索引){
让keyName=Object.keys(错误)
让str=error[keyName]
返回keyName+“”+str;
});
res=res.join(“\n”);
})
.add('maxx answer',function(){
让数据={
“错误”:[
{
“密码”:“必须至少有5个字符”
},
{
“电子邮件”:“格式无效”
}
]
}
data.errors.map(error=>Object.keys(error.map)(key=>`${key}${error[key]}')).join('\n');
})
.add('对于键',函数()){
让数据={
“错误”:[
{
“密码”:“必须至少有5个字符”
},
{
“电子邮件”:“格式无效”
}
]
}
var-res='';
for(设i=0;i
现在你想要什么?你的问题不清楚。请定义问题。
Object.keys
返回一个数组。他们说您正试图使用该数组作为
错误
?OT Personal:@BhojendraNepal的索引您到底有什么问题。下降?正如你在下面看到的,这是一个问题,只是黑客不知道什么是最好的做法,现在。你可以更具建设性,但只能批评和否决。这对新来者来说既尴尬又不好。太好了!谢谢虽然我使用多行,为了更好的可读性,这是一个很好的答案!太多了!不幸的是,与往常一样,您以性能换取可读性。