ショボ短歌会

現在javascriptでの開発などを行っているのですが、タイトルにもありますように、配列に複数の値を格納し、その後ある値と総当たりで計算を行わせ、昇順に配列しなおすことは可能でしょうか?初学者であり、コードで実装する方法が思いつきません。どなたかお力をお貸しください。よろしくお願いいたします。

質問者からの補足コメント

  • 一つの値に対して、複数の値を足したりできるのかをお聞きしました。
    わかりづらくて申し訳ありません。
    例えば・・・
    calc1 = [1]の「1」という値と、
    calc2 = [2,4,6,8,10]の全部の値を取り出して、足したり掛けたりできるのか。
    result = (1*2、1*4、1*6、1*8,1*10)
    みたいなことをjavascriptで出来るのでしょうか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2022/01/14 17:44

A 回答 (5件)

(徹夜で力尽きる・・・)



<!DOCTYPE html>
<meta charset="UTF-8" />
<title></title>
<style>

</style>

<body>
<ol id="HOGE"></ol>

<script>
//平面上の点を扱いやすいように定義
class P {
constructor (x = 0, y = 0) { this.x = x; this.y = y; }//定義
add (p) { this.x += p.x; this.y += p.y; return this; }//加算
sub (p) { this.x -= p.x; this.y -= p.y; return this; }//減算
copy () { return new this.constructor (this.x, this.y); }//複写
norm () { return (this.x**2 + this.y**2)**.5; }//距離
distance (p) { return this.copy().sub(p).norm(); }//2転換の距離
}

//建物を定義
class Building extends P {
constructor (name, x, y) { super (x, y); this.name = name; }
clone () { new this.constructor (this.name, this.x, this.y)}
}
//建物を呼び出しやすいように簡素化
function B(n,x,y) { return new Building (n,x,y)}

//公共の建物
let pub = [ B("市役所",5,3), B("警察",7,1), B("消防",9,1), B("病院",9,0), B("学校",4,10),];

//物件の位置
let ary = [ B("物件1",9,10), B("物件2",9,1), B("物件3",3,9), B("物件4",1,6), ];

//公共の建物からの総距離を計算
ary.forEach (a=> a.total = pub.reduce ((total, p)=> total + p.distance (a), 0));

//距離で並び替え
ary.sort ((a,b)=> a.total - b.total);

//結果表示
for (let i = 0, I = ary.length; i < I; i++) {
let { name, x, y, total } = ary[i];
HOGE.appendChild (document.createElement ('li')).append (name,": ",total.toFixed (3)," km");
}


</script>
    • good
    • 2
この回答へのお礼

ご連絡ありがとうございます。

わざわざ徹夜での作業までしていただいて本当にありがとうございます。
ぜひ自分のシステムに改良して取り入れたいと思います。
本当にありがとうございました!!

お礼日時:2022/01/19 05:40

そういう演算はストリームと呼ばれることがあるけど


どんな言語でもできる。
Javascriptはストリームが簡単にできる言語のひとつ。

もともとHaskelやscalaが源流だけど、
pythonもできるし、不得意だったJavaでも
今は楽にできるようになった。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

確かにそうですね。。今は多くの言語でそういったことができますね。
私は今回はjavascriptでの実装を目指していたので、頑張ってみようと思います!

お礼日時:2022/01/16 18:32

let 値 = 2, 配列 = [4,1,2];


let 処理後 = 配列.map( n => 値*n ).sort( (a,b) => a-b );
表示(処理後); // [2, 4, 8]

行と列の直積ならば

let 行 = [1,2,3], 列 = [2,3,4];
let 計算 = (p,v) => p.concat(列.map( n => n*v ));
let 処理後 = 行.reduce(計算, []).sort( (a,b)=>a-b );
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

物凄くわかりやすく説明で、初学者の私でも調べながらですが
理解することが出来ました。
色々自分のサイトに改良して取り入れてみようと思います!

お礼日時:2022/01/16 18:30

処理後 = 配列.map(n=>計算(n,ある値)).sort((a,b)=>比較(a,b))

    • good
    • 2
この回答へのお礼

ご回答ありがとうございます。

自分なりに改良して取り入れてみたいと思います。

お礼日時:2022/01/14 19:55

できると思いますが、具体的に何をしたいかわかりません

この回答への補足あり
    • good
    • 1
この回答へのお礼

すみません。伝え方が不十分でした。

お礼日時:2022/01/14 19:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!