2017-10-22 9 views
1

私はオブジェクト(「カード」と呼ばれます)を受け取る関数を持っています。この関数の中で、私はそのプロパティの値の1つを変更したいが、変更はしない。私はそれが違いを生むだろうとは思いませんが、私はNode.jsのを使用していますところでJsオブジェクトのプロパティが変更されていません

function replaceImgsUrl(card){ 
    console.log("card: " , card);// prints card: {imgs:[]} 
    card.imgs = "sex"; 
    console.log("new card: " , card); // prints new card: {imgs:[]} 
    return card; 
} 

: はここの関数です。 これはなぜ起こっているのかもしれないのですか?

+0

'card.imgs'にデータをプッシュしたいのであれば' card.imgs [0] = 'sex'; '? – ArchNoob

+1

書き込み可能なプロパティでない可能性があります –

+2

オブジェクト 'card'はどのように定義されていますか?可能であれば、オブジェクトはフリーズされ( 'freeze()')、 'imgs'を変更できないように設定されています。あなたが 'card.imgs.push(" sex ")'をするなら、あなたにとっては大丈夫でしょう。 – trincot

答えて

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

2

私はあなたのcardオブジェクトが定義されていたかわからないんだけど、それがfreezedだったり、プロパティを変異を防止することができますsome kind of immutable libraryを使用している場合。
しかし、あなたがここに見ることができるように、それ以外の場合は正常に動作します:

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

cardオブジェクトがObject.freeze()またはその他のオブジェクトのプロパティへの変更を許可しないように設定して凍結させたように見えます。それだけで返された値が意志

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; 
} 

注:あなたが本当にimgsプロパティが文字列に配列から変更したい場合は

、あなたは新しいオブジェクトを作成するより他に方法がないだろうと思いますあなたが望むようにオブジェクトを持っている;元のオブジェクトは変更されません。

+0

hmm、私は確信していませんが、何らかの理由で 'card'を変更できない場合は、そのメモリを再割り当てできますか? –

+0

'imgs'に割り当てることはできませんが、' imgs.length = 0'や 'imgs.push(" sex ")'、 'imgs [0] =" genderのように、 'imgs'配列を変更する* "、...など。 – trincot

+0

私は 'card'オブジェクトを参照していました。 'card'が何らかのライブラリによって凍結または保護されている場合はどうなりますか? –