У меня есть функция, где он получает объект (называемый "карта"). внутри этой функции я хочу изменить значение одного из своих свойств, но оно не изменяется. вот функция:
function replaceImgsUrl(card){
console.log("card: " , card);// prints card: {imgs:[]}
card.imgs = "sex";
console.log("new card: " , card); // prints new card: {imgs:[]}
return card;
}
Кстати, я использую node.js, хотя я не думаю, что это изменило бы ситуацию. Кто-нибудь имеет представление о том, почему это может произойти?
Я не уверен, как был определен ваш объект card
и если он был freezed
или вы используете какую-то неизменяемую библиотеку, которая не позволит вам изменять свойства.
Но в остальном он отлично работает, как вы можете видеть здесь:
var myCard = {
imgs: []
}
function replaceImgsUrl(card){
console.log("card: " , card);// prints card: {imgs:[]}
card.imgs = "sex";
console.log("new card: " , card); // prints new card: {imgs:[]}
return card;
}
replaceImgsUrl(myCard);
Ваш код, кажется, работает с фактическим объектом в качестве аргумента, но выглядит странно. Почему вы хотите заменить свойство объекта, которое является массивом с помощью строки?
function replaceImgsUrl(card){
console.log("card: " , card);// prints card: {imgs:[]}
// card.imgs = "sex";
card.imgs.push("sex"); // Isn't it what you'd like to do ?
console.log("new card: " , card); // prints new card: {imgs:[]}
return card;
}
replaceImgsUrl({ imgs: [] });
Похоже, что объект card
был заморожен с помощью Object.freeze()
или иным образом настроен так, чтобы не допускать модификаций свойств объекта.
Если вы действительно хотите, imgs
свойство imgs
изменилось с массива на строку, у вас, вероятно, нет другого пути, кроме создания нового объекта:
function replaceImgsUrl(card){
console.log("card: " , card);// prints card: {imgs:[]}
card = Object.assign({}, card); // get shallow copy
card.imgs = "sex";
console.log("new card: " , card); // prints new card: {imgs:"sex"}
return card;
}
Обратите внимание, что только возвращаемое значение будет иметь объект по своему желанию; исходный объект не будет изменен.
card
по какой-то причине, можете ли вы переназначить ее память?
imgs
, но вы можете мутировать imgs
массив, как с imgs.length = 0
или imgs.push("sex")
, imgs[0] = "gender"
, ... и т.д..
card.imgs
данные в массивcard.imgs
почему бы не использоватьcard.imgs[0] = 'sex';
?