Переименуйте имена свойств и измените значения нескольких объектов

в объекте ниже, я хотел бы изменить имя свойства thumb, to thumbnail. Я также хотел бы изменить значения title включить <span> теги.

вот:
var data = [{
    thumb: '/images/01.png',
    title: 'My title',
},{
    thumb: '/images/02.png',
    title: 'My title',
},{
    thumb: '/images/03.png',
    title: 'My title',
}];

вот как я хотел бы, чтобы это выглядело:

var data = [{
    thumbnail: '/images/01.png',
    title: '<span class="red">title 1</span>',
},{
    thumbnail: '/images/02.png',
    title: '<span class="red">title 2</span>',
},{
    thumbnail: '/images/03.png',
    title: '<span class="red">title 3</span>',
}];

вот что я пробовал, что не работает:

 var i=0, count=data.length;
   for (i=0;i<=count;i++){
    data[i].thumbnail=data[i].thumb;
    data[i].title="<span class='red'>"+data[i].title+"<span>";
   }

3 ответов


Это, кажется, сделать трюк:

function changeData(data){
    var title;
    for(var i = 0; i < data.length; i++){
        if(data[i].hasOwnProperty("thumb")){
            data[i]["thumbnail"] = data[i]["thumb"];
            delete data[i]["thumb"];
        }

        if(data[i].hasOwnProperty("title")){ //added missing closing parenthesis
            title = data[i].title;
            data[i].title = '<span class="red">' + title + '</span>';
        }
    }
}

changeData(data);

EDIT:

Я попытался сделать функцию универсальной, но так как вы обновили свой ответ, чтобы делать очень конкретные вещи, я добавил в функцию бизнес-логику.


вы можете итерация по массиву установить новое свойство в каждом объекте, и delete старые свойства:

data.forEach(function(e) {
   e.thumbnail = e.thumb;
   delete e.thumb;    
});

здесь пример работающего (проверьте выход в консоли).

очевидно, вы захотите использовать polyfill для Array.prototype.forEach Если вы хотите поддерживать старые браузеры (есть один в статье MDN, с которой я связан выше, или вы можете просто использовать обычный for петли).


Я создал хорошую функцию для переименования имен свойств:https://github.com/meni181818/simpleCloneJS/blob/master/renameProperties.js

пример:

var sourceObj = {
    foo: 'this is foo',
    bar: {baz: 'this is baz',
          qux: 'this is qux'}
};
//                                the source, rename list
var replacedObj = renameProperties(sourceObj, {foo: 'foooo', qux: 'quxxxx'});
// replacedObj output => {
        foooo: 'this is foo',
        bar: {baz: 'this is baz',
              quxxxx: 'this is qux'}
    };

поскольку вы используете jQuery, вы можете использовать