2016-08-05 7 views
-1

私は特別なテキスト形式で必要とするので、エラーメッセージを補間しようとします。 これを行うベストプラクティスは何ですか: 助けてくれてありがとう!ES6 javascriptでkey、valueのペアを文字列に再帰的に変換する方法は?

http://codepen.io/radosch/pen/wWYPYG?editors=1111

所望の結果:

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")); 
+0

* nowdays *どうやってみたいですか?あなたの質問は不明です。問題を定義してください。 –

+0

'Object.keys'は配列を返します。あなたはその配列を 'error'へのインデックスとして使用しようとしていますか? –

+0

OT個人:@BhojendraNepalどのような問題がありますか?ダウンレート? 下記のように、今すぐ何がベストプラクティスであるかを知らずにハッキングするだけの問題です。あなたはより建設的なことができますが、批判しdownvoteだけです。それは恥ずかしがり屋で、新人にはうれしくない。 – radosch

答えて

1

のように、ES6機能がbut not only)(少なくとも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'; 
} 

ベンチマーク:

question x 189,765 ops/sec ±1.39% (82 runs sampled) 
maxx answer x 267,565 ops/sec ±0.98% (80 runs sampled) 
for keys x 1,735,444 ops/sec ±0.85% (82 runs sampled) 
Fastest is for keys 

試験:

"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 }); 
+0

omg、それはすばらしい答えです! Thnxたくさん! 残念なことに、常にそのように、読みやすさのためにパフォーマンスを交換します。 – radosch

1

このようなものはありますか?

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

パーフェクト!ありがとう! 私は複数の読みやすさのためにそれを使用していますが、 – radosch

関連する問題