2017-06-12 10 views
1

を追加します。 更新するアイテムのインデックスは知っていますが、既存のプロパティをオーバーライドしたくありません。クローン拡散演算子を持つ配列および追加インライン

は今、私は、配列のために同じことをやりたい:上記と同じことを行う可能性があります

let newArray = [ 
    ...arr, 
    [key]: { 
     ...arr[key], 
     thing: true } 
    ] 

しかし、それは動作しません。

{key}:thingは機能しますか?私はどこか、おそらくそのES7を読んで覚えていますか?

は私が行うことができます:

let newArray = arr.map((item, key) => key === index ? { ...item, thing: true } : item); 

しかし、私はクリーンな構文を期待していました。似たような構文がないなら、私はnoを受け入れます。

+0

を/ itemに配列の先頭に 'map'を付けます。または、2つのスライスで配列を広げます。 – Bergi

+4

あなたは配列とオブジェクトを混同しています。 – SLaks

+1

'[key]:thing'は配列要素ではありません。 – wostex

答えて

0

配列にはキーがないため、使用している構文は機能しません。オブジェクトの配列ですか?もしそうなら...

EDIT - あなたのコメントに基づいて、これを試してみてください。

// if you know the index of the object you'd like to modify 
let newArray = [ 
    ...arr 
] 
newArray[idx][key] = thing 

// if you don't know the index 
let newArray = [ 
    ...arr 
] 
newArray.map((el) => { 
    if (/* YOUR LOGIC HERE TO DETERMINE IF THIS IS THE OBJECT TO MODIFY! */) { 
     return el[key] = thing 
    } else { 
     return el 
    } 
}) 

// if you want it done in one function... 
let newArray = [] 
arr.map((el) => { 
    if (el[key]) { 
     newArray.push(Object.assign({}, { [key]: thing })) 
     return el 
    } else { 
     newArray.push(Object.assign({}, el)) 
     return el 
    } 
}) 
+0

配列内の特定のオブジェクトのインデックスにアクセスし、その配列を新しい配列に挿入した後にそのオブジェクトのプロパティのみを更新する必要があります。 – TrySpace

+0

@TrySpace、私の編集があなたの必要性に対応しているかどうかを確認してください – Adam

+0

私はOPがこれをこのようにすることができると知っていると確信していますが、彼らは1行(つまり1つの表現) –

1

あなたがObject.assign()使用することができます:あなたが追加したい場合を除き、ノー

const arr = [{ a: 1 }, { b: 1 }, { c: 1 }]; 
 
const index = 1; 
 

 
const newArr = Object.assign([], arr, { [index]: { ...arr[index], thing: true } }); 
 
console.log(newArr);

+0

@TrySpace私の更新された答えを見てください。 –