Переименуйте имена свойств и измените значения нескольких объектов
в объекте ниже, я хотел бы изменить имя свойства 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, вы можете использовать