修改对象列表的键

时间:2017-01-06 02:33:32

标签: javascript

我有一个对象列表:

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,这可能吗?

4 个答案:

答案 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)

这个解决方案怎么样?希望它有所帮助!

&#13;
&#13;
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;
&#13;
&#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;
});