こんにちは。
ご質問に挙げられている arr1
と、arr3
は、
apple
、orange
、banana
の外側に
もうひとつ、 { }
が必要と思われました。
(※質問に挙がっているコードのままだと、文法エラーになります。)
以下は、arr1
を上記にそって修正しての回答になります。(ES6 で書いています)
javascript
1const arr1 = [
2 { apple: { id: 0, price: 100 } },
3 { orange: { id: 1, price: 200 } },
4 { banana: {id: 2, price: 300} },
5]
6
7const arr2 = [0, 2]
8
9const arr3 = arr1.reduce((arr, e) => {
10 if (arr2.indexOf(e[Object.keys(e)[0]].id) >= 0)
11 arr.push(e)
12 return(arr)
13}, []);
14
15console.log(arr3)
上記を実行すると、以下が表示されます。
[ { apple: { id: 0, price: 100 } },{ banana: { id: 2, price: 300 } } ]
以上、参考になれば幸いです。
追記
reduce
ではなくて、(お題がフィルターなのだから) filter
を使ったほうが
シンプルに書けました。
javascript
1const arr1 = [
2 { apple: { id: 0, price: 100 } },
3 { orange: { id: 1, price: 200 } },
4 { banana: {id: 2, price: 300} },
5]
6
7const arr2 = [0, 2]
8
9const arr3 = arr1.filter(e => (arr2.indexOf(e[Object.keys(e)[0]].id) >= 0))
10
11console.log(arr3) //=> [ { apple: { id: 0, price: 100 } }, { banana: { id: 2, price: 300 } } ]
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/01/14 07:53
2018/01/14 07:55