ES6には以下のオブジェクトがあります。
const myObject = {
list1: [
{ title:'test1', acted:false, currentAction:false
},
{ title:'test2', acted:false, currentAction:false
},
{ title:'test3', acted:false, currentAction:false
},
{ title:'test3', acted:false, currentAction:false
}],
list2:
[
{ title:'data1', acted:false, currentAction:false
},
{ title:'data2', acted:false, currentAction:false
},
{ title:'data3', acted:false, currentAction:false
},
{ title:'data4', acted:false, currentAction:true,
}],
list3:
[
{ title:'a1', acted:false, currentAction:false
},
{ title:'a2', acted:false, currentAction:false
},
{ title:'a3', acted:false, currentAction:false
},
{ title:'a4', acted:false, currentAction:false,
}],
}
currentAction
リスト内のプロパティがtrueであるかどうかを確認し、falseにして、変更されたオブジェクト全体を返します。
オブジェクトのプロパティを直接変更する方法は知っていますが、オブジェクト内のリストをフィルタリングして変更できるかどうかはわかりません。
これは私が試したものです
const newObject = { ...myObject, currentAction:true }
このコードを試しました:
const newObject = { ...myObject, currentAction:true }
これは何もフィルタリングせず、あなたが望むものに近づきません。しかし、それは質問を明確にするのに役立ちます。「変更されたオブジェクト全体を返す」と言うとき、明らかに全体を意味しているようです。
{
list1: [
{ title:'test1', acted:false, currentAction:false
},
{ title:'test2', acted:false, currentAction:false
},
{ title:'test3', acted:false, currentAction:false
},
{ title:'test3', acted:false, currentAction:false
}],
list2:
[
{ title:'data1', acted:false, currentAction:false
},
{ title:'data2', acted:false, currentAction:false
},
{ title:'data3', acted:false, currentAction:false
},
{ title:'data4', acted:false, currentAction:true,
}],
list3:
[
{ title:'a1', acted:false, currentAction:false
},
{ title:'a2', acted:false, currentAction:false
},
{ title:'a3', acted:false, currentAction:false
},
{ title:'a4', acted:false, currentAction:false,
}],
}
それでは、質問に答えましょう。まず、currentAction
プロパティを次のようにリセットしますfalse
。
for (listIndex = 0; listIndex < 3; ++listIndex) {
for (const innerObject of myObject["list" + listIndex]) {
innerObject.currentAction = false;
}
}
表記"list" + listIndex
は文字列の連結です。表記myObject[...]
は、計算されたプロパティ名を使用してプロパティにアクセスするために使用されます。これにより配列が得られ、を使用して繰り返しfor (const innerObject of ...)
ます。
ここで、新しいオブジェクトを返すために:すでににあるので、必要ありませんmyObject
。myObject
として宣言されていても、それが含むconst
オブジェクト参照が定数であることを意味します。つまり、myObject
常に同じオブジェクトを参照します。ただし、オブジェクト自体は変更される可能性があります。
編集: Felix Klingは、のプロパティfor (const list of Object.values(myObject))
を反復処理するために使用することを提案しましたmyObject
。このように、プロパティの数や名前については何も想定していません。また、名前innerObject
をに変更しましたlistItem
。
for (const list of Object.values(myObject)) {
for (const listItem of list) {
listItem.currentAction = false;
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加