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

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

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

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

3回答

830閲覧

配列を何等分かにして、その内の1つを取り出したい

yuki_90453

総合スコア326

JavaScript

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2021/05/19 03:33

概要

数千件ある配列データを、何等分かにして、その内の1つだけを取り出したいと考えています。
割り切れない場合の処理方法について悩んでいます。

#サンプル

const sample_array = [] for(let i=0;i<1000;i++){ sample_array.push("s") } const total_split = 3 //分割数 const index = 2 // 配列から取り出したいインデックス const start = Math.floor((index-1) * sample_array.length/total_split) const end = Math.floor(index * sample_array.length/total_split) sample_array.slice(start,end)

#質問
分割した場合、割り切れない数値を考える必要があるのですが、どのようにすれば良いでしょうか?

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

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

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

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

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

yambejp

2021/05/19 03:44

たとえば10個のデータを3で割る場合 4,3,3、4,4,2、3,3,4など分割の仕方はいくつかありますが どういうロジックでどうしたいのでしょうか?
yuki_90453

2021/05/19 03:50

3で割る場合、3,3,4で分割したいです。なるべく均等にしたいので、4,4,2は無しで考えています。
yambejp

2021/05/19 03:59

後ろに寄せるのですね11は3,4,4でいいですね?
yuki_90453

2021/05/19 04:07

前後に寄せる文には、特にこだわりはありません。 ただ、コードの見やすさを考えると前に寄せた方いいでしょうか?
guest

回答3

0

ベストアンサー

破壊的に処理していいならこんな感じで

javascript

1const a=Array(100).fill(null).map((_,x)=>x); 2const b=3; 3const c=2; 4const d=Array(b).fill(null).map((_,x)=>Math.floor(a.length/b)+(x<a.length%b)).map(x=>a.splice(0,x)); 5console.log(d[c]);

投稿2021/05/19 04:32

yambejp

総合スコア115010

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

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

yuki_90453

2021/05/19 04:45

ありがとうございます。1行で書いてしまうのすごいですね。勉強させて頂きます。
guest

0

とりあえずコードを。

理屈としては、分割する数を決める=>余りは分割数以下になるので割り振る=>実際に分割という感じですね。

function separate(array, total_split){ let array_length = array.length; let min_len = Math.floor(array_length / total_split); // 切り捨て let rest = array_length % total_split; //余り let max_len = min_len + 1; //余りの数はtotal_split未満になるので1づつ割り振れば良い let max_num = rest; let min_num = total_split - rest; separated_array = [] let start = 0; let end = 0; for (let i=0;i<total_split;i++){ if (i <= min_num){ end += min_len; separated_array.push(array.slice(start, end)) start = (end + 1) }else{ end += max_len; separated_array.push(array.slice(start, end)) start = (end + 1) } } console.log(start, end); return separated_array; } const array_length = 1001; const total_split = 3; sample_array = []; for(let i=0;i<array_length;i++){ sample_array.push("s"); } separated_array = separate(sample_array, total_split); console.log(separated_array); let index = 1; console.log(separated_array[index]);

投稿2021/05/19 04:31

編集2021/05/19 04:40
digitalhimiko

総合スコア142

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

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

0

サイズ l の配列をn等分した際に出来上がる配列のサイズのパターンは m, m+1 の2通りになります。

m : m = l / n (端数切捨て)

先頭からでも終端からでも構いませんが、以下の要領で配列を分割していけば良いでしょう。

  • 現在の配列サイズlnがnで割り切れる (ln % n === 0)のであれば、先頭からm個分要素を取り出す
  • そうでなければ m+1 個分要素を取り出す

投稿2021/05/19 04:15

hope_mucci

総合スコア4447

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

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

yuki_90453

2021/05/19 04:46

回答ありがとうございます。確かに割り切れる場合も想定が必要ですね。勉強させて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問