2016-11-20 49 views
2

我有一個很奇怪的問題,我lodash碼如何蛇的情況下轉換爲駝峯在我的應用程序

我有類似

data = { 
    'id':'123', 
    'employee_name': 'John', 
    'employee_type': 'new' 
} 

var newObj = _.mapValues(data, function (value, key) { 
    var t = _.camelCase(key); 
    console.log(t) -> shows employeeName and employeeType 

    return _.camelCase(key); 
}); 

我期待我的newObj將成爲

data = { 
    'id':'123', 
    'employeeName': 'John', 
    'employeeType': 'new' 
} 

我運行上面的代碼後,它仍然保持不變,就像它一樣

data = { 
    'id':'123', 
    'employee_name': 'John', 
    'employee_type': 'new' 
} 

這是超級怪異的,我不知道哪裏出了問題。有人可以幫我解決這個問題嗎?非常感謝!

+2

什麼'newObj'樣子?我也會認爲 –

+0

@JaromandaX {id}:'id','employee_name':'employeeName','employ_type':'employype' } 我想我需要使用與mapValues – Jwqq

+0

不同的映射函數,因爲您將值映射到密鑰 –

回答

3

使用_.mapKeys()代替_.mapValues()

var data = { 
 
    'id': '123', 
 
    'employee_name': 'John', 
 
    'employee_type': 'new' 
 
}; 
 

 
var newObj = _.mapKeys(data, function (value, key) { 
 
    return _.camelCase(key); 
 
}); 
 

 
console.log('newObj: ', newObj);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"></script>

您可以使用_.transform()代替_.mapKeys()來獲得同樣的效果:

var data = { 
 
    'id': '123', 
 
    'employee_name': 'John', 
 
    'employee_type': 'new' 
 
}; 
 

 
var newObj = _.transform(data, function(result, value, key) { 
 
    result[_.camelCase(key)] = value; 
 
}, {}); 
 

 
console.log(newObj);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"></script>

+0

謝謝,但我當我使用它時,獲取_.mapKeys不是函數錯誤消息。這很奇怪... + 1 – Jwqq

+1

你必須有lodash版本3.8.0或更高版本 - 版本2.4.0中引入的mapValues ...所以你可以有一個沒有其他 –

+0

我有「lodash」:「4.6.1」,在我的package.json ..不知道爲什麼它不起作用。 – Jwqq

2

這是另一個使用簡單循環的答案。

var data = { 
    'id': '123', 
    'employee_name': 'John', 
    'employee_type': 'new' 
}; 

var output = {} 
for (var key in data) { 
    output[_.camelCase(key)] = data[key]; 
} 
+0

'data [_。camelCase(key)]'應該是'output [_.camelCase(key)]' –

+0

@JaromandaX感謝您的糾正。 :)改變 –

1

你也可以輕鬆創建自己的函數,該函數:

var data = { 
 
    'id': '123', 
 
    'employee_name': 'John', 
 
    'employee_type': 'new' 
 
} 
 

 
function camelCase(obj) { 
 
    var newObj = {}; 
 
    for (d in data) { 
 
    if (data.hasOwnProperty(d)) { 
 
     newObj[d.replace(/(\_\w)/g, function(k) { 
 
     return k[1].toUpperCase(); 
 
     })] = data[d]; 
 
    } 
 
    } 
 
    return newObj; 
 
} 
 

 
console.log(camelCase(data));

0

另一種方式

_(data) 
    .keys() 
    .map(_.camelCase) 
    .zipObject(_.values(data)) 
    .value() 
相關問題