cla*_*aya 59 javascript jquery underscore.js
我需要将一个js对象转换为另一个对象,以便传递到一个服务器帖子,例如,键的名称不同
var a = {
name : "Foo",
amount: 55,
reported : false,
...
<snip/>
...
date : "10/01/2001"
}
Run Code Online (Sandbox Code Playgroud)
需要变成
a = {
id : "Foo",
total : 55,
updated: false,
...
<snip/>
...
issued : "10/01/2001"
}
Run Code Online (Sandbox Code Playgroud)
我在哪里查找obj可用于映射所有键
var serverKeyMap = {
name : "id",
amount : "total",
reported : "updated",
...
date : "issue"
}
Run Code Online (Sandbox Code Playgroud)
是否有一个函数可用于underscore.js或jQuery,我可以使用它来执行此功能?
谢谢
Sam*_*iar 65
我知道你没有提到lodash并且答案已经解决了问题,但其他人可能会利用替代方案.
正如@CookieMonster在评论中提到的那样,你可以这样做_.mapKeys:
_.mapKeys(a, function(value, key) {
return serverKeyMap[key];
});
Run Code Online (Sandbox Code Playgroud)
小提琴:http://jsfiddle.net/cwkwtgr3/
dul*_*ule 40
与@pimvdb类似,您也可以使用_.reduce:
_.reduce(a, function(result, value, key) {
key = map[key] || key;
result[key] = value;
return result;
}, {});
Run Code Online (Sandbox Code Playgroud)
小提琴:http://jsfiddle.net/T9Lnr/39/
pim*_*vdb 33
据我所知,这两个库中没有内置任何功能.不过你可以轻松地制作自己的:http://jsfiddle.net/T9Lnr/1/.
var b = {};
_.each(a, function(value, key) {
key = map[key] || key;
b[key] = value;
});
Run Code Online (Sandbox Code Playgroud)
小智 11
您可以使用标准JavaScript将值复制到新属性,并使用省略删除原始属性,如下所示:
a.id = a.name;
a.total = a.amount;
a.updated = a.reported;
a = _.omit(a, 'name', 'amount', 'reported');
Run Code Online (Sandbox Code Playgroud)