Свойство объекта Js не изменяется

1

У меня есть функция, где он получает объект (называемый "карта"). внутри этой функции я хочу изменить значение одного из своих свойств, но оно не изменяется. вот функция:

 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, хотя я не думаю, что это изменило бы ситуацию. Кто-нибудь имеет представление о том, почему это может произойти?

  • 0
    Если вы хотите card.imgs данные в массив card.imgs почему бы не использовать card.imgs[0] = 'sex'; ?
  • 1
    это может быть не доступное для записи свойство
Показать ещё 3 комментария
Теги:

3 ответа

2

Я не уверен, как был определен ваш объект 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);
0

Ваш код, кажется, работает с фактическим объектом в качестве аргумента, но выглядит странно. Почему вы хотите заменить свойство объекта, которое является массивом с помощью строки?

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: [] });
0

Похоже, что объект 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;
}

Обратите внимание, что только возвращаемое значение будет иметь объект по своему желанию; исходный объект не будет изменен.

  • 0
    хм, я не уверен, но если вы не можете изменить card по какой-то причине, можете ли вы переназначить ее память?
  • 0
    Вы не можете назначить imgs , но вы можете мутировать imgs массив, как с imgs.length = 0 или imgs.push("sex") , imgs[0] = "gender" , ... и т.д..
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню