我有一个对象列表:
userEvents : [
{title : "now", start : "after", end : "when it ends"},
{title : "now", start : "after", end : "when it ends"},
{title : "now", start : "after", end : "when it ends"}
]
我想更改对象的键,如:title
我希望它是eventName
,这可能吗?
答案 0 :(得分:0)
是的,就像这样:
for( var i = 0; i < userEvents.length; i++ ) {
userEvents[i].eventName = userEvents[i].title;
delete userEvents[i].title;
}
这是通过在eventName
列表中的每个对象上定义新属性userEvents
,然后将引用复制到字符串,然后删除旧的title
属性。 <{1}}和title
属性引用的基础字符串对象未更改并保留。
(JavaScript中的eventNames
会导致变量或属性变为delete
,而在C ++中它会调用undefined
析构函数)
答案 1 :(得分:0)
这个解决方案怎么样?希望它有所帮助!
var someobject = {userEvents : [{
title: "now",
start: "after",
end: "when it ends"
}, {
title: "now",
start: "after",
end: "when it ends"
}, {
title: "now",
start: "after",
end: "when it ends"
}]}
for( var i = 0; i < someobject.userEvents.length; i++ ) {
var obj = someobject.userEvents[i];
for(var j in obj){
if(j === "title"){
obj["eventName"] = obj[j];
delete obj[j];
}
}
}
console.log(someobject.userEvents);
&#13;
答案 2 :(得分:0)
如果您正在使用自包含的通用函数来执行此操作,则可以轻松地模拟某些内容(此处已归功于其他答案):
rename_keys(
[
{a:3,b:5}, {a:4,b:6}
],
{
b:'c'
}
);
// results in:
// [
// {a:3,c:5}, {a:4,c:6}
// ]
第一个参数是要修改的对象数组。第二个参数是一个对象,用于定义要重命名的键和要重命名的键。样品用法:
Array.prototype.rename_keys = function (key_map) {
return rename_keys( this, key_map );
};
// then, this is possible:
userEvents.rename_keys( {title: 'eventName'} );
注意:这将修改原始对象并返回相同对象的新数组。如果您不希望这种情况发生,则必须采取额外措施。
注意2:虽然通常不建议修改核心对象,但如果想你可以使其成为任何数组的成员函数:
[a,a,a,b,b,b,a,a,a]
答案 3 :(得分:-1)
您可以使用Array.prototype.map
代替其他海报的天真实施。这些天最好使用更现代的功能风格。
userEvents.map(function(obj) {
obj.eventName = obj.title;
});