質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

1229閲覧

Javascript 配列の数値とオブジェクトのidを比較し、異なっているidだけのオブジェクトを生成したい。

IRIESS

総合スコア45

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/06/07 12:53

編集2021/06/07 12:55

前提・実現したいこと

Vue.jsのcomputed内で、オブジェクトを基にして別の配列を使用し、新しいオブジェクトを生成したいと考えています。

すべてのスキル(allSkills)からユーザーの登録したスキル(userSkills)を除いた(unselectedSkills)を生成したいのですが、いろいろ調べて下記のようにやってみたのですが、元のオブジェクトと変わらなかったり、うまくいきません。

filterメソッドを使うとよさそうというとことまでは気付いたのですが、公式リファレンス等にも引数に配列を渡すやり方は載っておらず、先に進まない状態です。。。
ご教授の程よろしくお願いいたします。

該当のソースコード

javascript

1const allSkills = [ { "id": 1, "name": "スキルA" }, { "id": 2, "name": "スキルB" }, { "id": 3, "name": "スキルC" } ] 2const userSkills = [ { "id": 2, "name": "スキルB" }, { "id": 5, "name": "スキルE" }, { "id": 7, "name": "スキルG" } ] 3 4const userIDs = userSkills.map(obj => obj.id) 5// [ 2, 5, 7, 8, 10 ] 6 7const unselectedSkills = allSkills.filter(function(obj) { 8 for ( id of this ) { 9 if (obj.id != id ) return true 10 } 11 }, userIDs) 12 13

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

filter条件は以下ではありませんか?

javascript

1const unselectedSkills = allSkills.filter(skillObj => { 2 for (let id of this) { 3 if (skillObj.id === id ) return false 4 } 5 return true; 6 }, userIDs)

投稿2021/06/07 14:50

kanetugu_70e

総合スコア100

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

結果としてどうなればいいのでしょうか?

javascript

1const allSkills = [ { "id": 1, "name": "スキルA" }, { "id": 2, "name": "スキルB" }, { "id": 3, "name": "スキルC" } ] 2const userSkills = [ { "id": 2, "name": "スキルB" }, { "id": 5, "name": "スキルE" }, { "id": 7, "name": "スキルG" } ] 3const unselectedSkills = allSkills.filter(x=>!userSkills .map(x=>x.id).includes(x.id)); 4console.log(unselectedSkills);

投稿2021/06/07 13:06

yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

IRIESS

2021/06/07 13:33

解答ありがとうございます。 結果として、 allSkillsのidが1,2,3,4,5 userSkillsのidが2,3,5だとしたら console.log(unselectedSkills)で [{id:"1", name:"スキルA"},{id:"4", name:"スキルD"}] となるようにしたいのです。
IRIESS

2021/06/07 19:27

その通りに書いてみたら解決できました。ご教授ありがとうございました。 書いていただいた式をしっかり理解していきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問