現在Reactのアプリ作成の中でreduceの動作について質問させてください.
下記にて全くわからない動作する場所があるので解説して欲しいです.
① test_funcを呼ぶ
② middleObjectを定義して, reduceが走る
③ splitして文字を切り出す
④ !acc[Name1]がtrueとなり中が実行
⑤ if-elseでelseが実行される.
⑥ 0:[{id: "A/testA/AA/sample1.jpg", name: "A/testA/AA/sample1.jpg"}]
がコンソールに出力
⑦ middleObject[Name2]に代入される
⑧ AA: children: Array(2) 0: {id: "A/testA/AA/sample1.jpg", name: "A/testA/AA/sample1.jpg"} 1: {id: "A/testA/AA/sample2.jpg", name: "A/testA/AA/sample2.jpg"} length: 2 __proto__: Array(0) id: "testA-AA" name: "AA"
がコンソールに出力される. (ここがわからない.)
⑨ 0
とコンソールに出力される.
この⑧の場所がわからないのがまだインデックス0
番しか処理指定なのになぜかインデックス1
の値の処理がされている点です.
正直かなり時間悩んでいるので知恵を貸してもらいたいです.
どうかどうかよろしくお願いします.
javascript
1import React from "react"; 2import logo from "./logo.svg"; 3import "./App.css"; 4 5const test_func = (fileName: string[]) => { 6 var middleObject: { [key: string]: any } = {}; 7 const tmp = fileName.reduce<{ [key: string]: any }>((accP, current, idx) => { 8 var acc = accP; 9 const split = current.split("/"); 10 const Name1 = split[1]; 11 const Name2 = split[2]; 12 const newChild = { 13 id: current, 14 name: current, 15 }; 16 17 if (!acc[Name1]) { 18 middleObject = {}; 19 } 20 21 if (middleObject[Name2]) { 22 middleObject[Name2]["children"].push(newChild); 23 } else { 24 console.log([newChild]); 25 middleObject[Name2] = { 26 id: Name1 + "-" + Name2, 27 name: Name2, 28 children: [newChild], 29 }; 30 console.log(middleObject); 31 console.log(idx); 32 } 33 34 if (!acc[Name1]) { 35 acc[Name1] = { 36 id: Name1, 37 name: Name1, 38 children: Object.values(middleObject), 39 }; 40 } 41 42 return acc; 43 }, {}); 44 45 return tmp; 46}; 47 48function App() { 49 const fileName1 = ["A/testA/AA/sample1.jpg", "A/testA/AA/sample2.jpg"]; 50 const renderTreeObject = test_func(fileName1); 51 return <div className="App"></div>; 52} 53 54export default App; 55
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。