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

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

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

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

Q&A

解決済

3回答

1430閲覧

JavaScriptにて、オブジェクトの要素の一部を削除したい

minyouyuu

総合スコア39

JavaScript

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

1グッド

0クリップ

投稿2019/11/06 13:22

JavaScript

1(function() { 2 "use strict"; 3 4 let fruits = { 5 apple: {price: 100, num: 10}, 6 orange: {price: 50, num: 20}, 7 grape: {price: 300, num: 30} 8 } 9 10 // fruitsの要素数が2を超える場合は、超えた部分をカットし要素数を2にする 11 if (Object.keys(fruits).length > 2) { 12 13 } 14})();

上記コードにありますオブジェクトfruitsの要素数が2を超える場合は、2を超える部分の要素を削除し、要素数を2にしたいのですが、方法が全く思いつきません。

現在fruitsには、apple、orange、grapeの3つの要素がありますが、これをappleとorangeの2つにするイメージです。appleとgrapeなどでもいいです。とにかく要素数を2にしたいです。

お手数をお掛けしますが、どのような方法があるのか、ご教授のほどよろしくお願いいたします。

matuxan👍を押しています

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

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

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

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

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

guest

回答3

0

{} は配列ではありませんので、「2番目以降」というような順番はありません
一方、new Map には順番があります。

JavaScript

1'use strict'; 2const array = [['apple', {price: 100, num: 10}], ['orange', {price: 50, num: 20}], ['grape', {price: 300, num: 30}]]; 3const fruits = new Map((array.splice(2), array)); 4console.log(JSON.stringify([...fruits])); // [["apple",{"price":100,"num":10}],["orange",{"price":50,"num":20}]]

Re: minyouyuu さん

投稿2019/11/06 13:55

編集2019/11/06 13:56
think49

総合スコア18156

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

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

minyouyuu

2019/11/06 14:04

mapは全く勉強したことがありませんでしたが、実際にmapを使ってみますと、期待の結果を得ることができました!これから勉強してみます。ありがとうございました!
guest

0

ベストアンサー

「もとのオブジェクトを破壊的に変更する」のと、「新しいオブジェクトを作る」のと、どちらが適当でしょうか。

javascript

1// 破壊的変更版 2Object.keys(fruit).forEach((item, index) => { 3 if(index >= 2) delete fruit[item]; 4}); 5 6// 新規作成版 7const newFruit = {}; 8 9// 途中脱出するためにsomeにしておく 10Object.keys(fruit).some((item, index) => { 11 if(index >= 2) return true; 12 newFruit[index] = fruit[index]; 13});

投稿2019/11/06 13:26

maisumakun

総合スコア145123

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

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

minyouyuu

2019/11/06 13:51

ありがとうございます!もとのオブジェクトを変更したいので、「破壊的変更版」の方を使わせていただきます。助かりました!
guest

0

削除すればよいのでは?

js

1 "use strict"; 2 3 let fruits = { 4 apple: {price: 100, num: 10}, 5 orange: {price: 50, num: 20}, 6 grape: {price: 300, num: 30} 7 } 8 9 // fruitsの要素数が2を超える場合は、超えた部分をカットし要素数を2にする 10 if (Object.keys(fruits).length > 2) { 11 delete fruits.grape; 12 } 13 console.table(fruits); 14```**動くサンプル:**[https://jsfiddle.net/c6fm73vq/](https://jsfiddle.net/c6fm73vq/) 15 16--- 17 18【プロパティの削除 - JavaScript | MDN19[https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Creating_New_Objects/Deleting_Properties](https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Creating_New_Objects/Deleting_Properties)

投稿2019/11/06 13:26

編集2019/11/07 02:42
kei344

総合スコア69366

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

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

minyouyuu

2019/11/06 13:36

早くにご回答ありがとうございます!! すみません、私の書き方に不足にございました。 現在、fruitsはapple、orange、grapeの3個の要素だけですが、fruitsは要素数が変わることを想定しております。fruitsの要素数が100個になる場合もあります。また、apple、orange、grapeのようにキーが分からない場合でも、要素数を2個にしたいと考えております。 質問に不足があり、すみません...質問内容を修正いたします。
kei344

2019/11/06 13:38

何個あっても削除すればいいだけですよ。 そのコードが欲しいならmaisumakunさんの回答にありますよ。
minyouyuu

2019/11/06 13:50

要素が何個になっても、ループを回して、deleteで削除すればよいのですね。サンプルや、参考になるページのリンクをくださり、ありがとうございました!
kei344

2019/11/07 02:42

To: x_x さん 指摘ありがとうございます、前者のほうです。 そのままのURLをコピーしたつもりだったのですが、失敗していますね・・・。修正しておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問