回答編集履歴

5

修正コード追記

2022/09/29 11:40

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,6 +1,39 @@
1
1
  feedData関数を呼び出したあとに uniqUnit を作らないといけませんが、feedData関数を呼び出す前に uniqUnit を作っているため `[]` になってしまいます。
2
2
  その後、feedData関数を呼び出しても unit だけが更新され、uniqUnit は更新されません。
3
3
  uniqUnitを更新する処理も関数にして、feedData関数から呼び出してはいかがでしょうか。
4
+ 処理を修正したコードを示しておきます。
5
+
6
+ ```js
7
+ let unit = []; // この変数にデータを格納したい
8
+ let uniqUnit = [];
9
+
10
+ function feedData(json) {
11
+ for (let i = 0; i < json.feed.entry.length; i++) {
12
+ const jsonFeedEntry = json.feed.entry[i];
13
+ const imageUrl = "media$thumbnail" in jsonFeedEntry
14
+ ? jsonFeedEntry.media$thumbnail.url
15
+ : "NoImage";
16
+ for (let k = 0; k < jsonFeedEntry.link.length; k++) {
17
+ if (jsonFeedEntry.link[k].rel == "alternate") {
18
+ const unitObject = {};
19
+ unitObject.title = jsonFeedEntry.title.$t;
20
+ unitObject.link = jsonFeedEntry.link[k].href;
21
+ unitObject.image = imageUrl;
22
+ unit.push(unitObject);
23
+ }
24
+ }
25
+ }
26
+ updateUniqUnit();
27
+ }
28
+
29
+ function updateUniqUnit() {
30
+ console.log('unit:', unit);
31
+ uniqUnit = Array.from(
32
+ new Map(unit.map((data) => [data.link, data])).values() // 回答をもとに修正
33
+ );
34
+ console.log('uniqUnit:', uniqUnit); // Array(0)となってしまう
35
+ }
36
+ ```
4
37
 
5
38
  unit.map で key と value の配列にして Map を作ります。
6
39
 

4

原因追記

2022/09/29 11:34

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,3 +1,7 @@
1
+ feedData関数を呼び出したあとに uniqUnit を作らないといけませんが、feedData関数を呼び出す前に uniqUnit を作っているため `[]` になってしまいます。
2
+ その後、feedData関数を呼び出しても unit だけが更新され、uniqUnit は更新されません。
3
+ uniqUnitを更新する処理も関数にして、feedData関数から呼び出してはいかがでしょうか。
4
+
1
5
  unit.map で key と value の配列にして Map を作ります。
2
6
 
3
7
  ```diff

3

実行結果追記

2022/09/28 23:01

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -19,3 +19,22 @@
19
19
  console.log(uniqUnit);
20
20
  ```
21
21
 
22
+ ```text:実行結果
23
+ [
24
+ {
25
+ title: 'appleとbanana',
26
+ link: 'https:...apple-banana.html',
27
+ image: 'https:...jpg'
28
+ },
29
+ {
30
+ title: 'apple',
31
+ link: 'https:...apple.html',
32
+ image: 'https:...jpg'
33
+ },
34
+ {
35
+ title: 'banana',
36
+ link: 'https:...banana.html',
37
+ image: 'https:...jpg'
38
+ }
39
+ ]
40
+ ```

2

コード追記

2022/09/28 12:33

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -4,3 +4,18 @@
4
4
  - new Map(unit.map((data) => [data, data.link, data])).values()
5
5
  + new Map(unit.map((data) => [data.link, data])).values()
6
6
  ```
7
+
8
+ ```js
9
+ const unit = [
10
+ {title: 'appleとbanana', link: 'https:...apple-banana.html', image: 'https:...jpg'},
11
+ {title: 'apple', link: 'https:...apple.html', image: 'https:...jpg'},
12
+ {title: 'appleとbanana', link: 'https:...apple-banana.html', image: 'https:...jpg'},
13
+ {title: 'banana', link: 'https:...banana.html', image: 'https:...jpg'},
14
+ ];
15
+
16
+ const uniqUnit = Array.from(
17
+ new Map(unit.map(data => [data.link, data])).values()
18
+ );
19
+ console.log(uniqUnit);
20
+ ```
21
+

1

訂正

2022/09/28 12:32

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,4 +1,4 @@
1
- key と value の配列に map して Map を作ります。
1
+ unit.map で key と value の配列にして Map を作ります。
2
2
 
3
3
  ```diff
4
4
  - new Map(unit.map((data) => [data, data.link, data])).values()