2017-01-25 10 views
0

にオブジェクトキーをクリーンアップしようとするので、私のように来てオブジェクトの配列を持っている:はlodash

var arr = [{'name of something ': 'value', 'another key': 'another value', ...}]; 

だから私は、この関数を書いた:

それはのような配列を取る望ん
function _cleanUpObjectKeys(data) { 
    return data.forEach(function(dataObject){ 
    return lodash.forOwn(dataObject, function(value, key){ 
     lodash.trim(key); 
     lodash.snakeCase(key); 
     console.log(key); 
    }); 
    }); 

私があなたに示したものは、私に返すことができます:

var arr = [{'name_of_something': 'value', 'another_key': 'another value', ...}]; 

しかし、それはありません。 ヘルプ?

console.log(key)は吐き出す:

  • name of something
  • another key

は基本的に私は、キーからすべての末尾のスペースを削除し、蛇のケースに変換したい(スペースを末尾に) 。

+1

'data.map'を返す必要がありますが、' .forEach'は新しい配列を返しません。 –

+0

@Daniel_Lそれでも動作しませんでした。 – TheWebs

+0

は '_.forOwn'のように見えますが、あなたが期待していたことをしていません。 –

答えて

2

あなたは、このためにArray#mapとlodashのtransform機能を使用できます。次のように

function _cleanUpObjectKeys(data) { 
    return data.map(function(dataObject){ 
    return _.transform(dataObject, function(resultObject, value, key) { 
     const newKey = _.snakeCase(_.trim(key)); 
     resultObject[newKey] = value; 
    }); 
    }); 
} 

Working CodePen

1

あなたはmap() iteratee機能を構成できます。

_.map(arr, _.unary(_.partialRight(
    _.mapKeys, 
    _.flow(_.trim, _.snakeCase) 
))); 
  • unary()は確かに一つだけの引数が渡され、この場合には、キー
  • partialRight()mapKeys()
  • mapKeys()ためiteratee機能がマッピングされたキー
  • flow()持つ新しいオブジェクトは、入力と出力を一緒に連鎖する、新しい関数を作成し、返します提供します