私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレ+ JavaScript の質問用スレッド vol.137 +
JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 :
レスフィルター : (試験中)
>>598
気になったので調べてみた。組み込みには無いね
http://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Set
function intersection(setA, setB) {
var _intersection = new Set();
for (var elem of setB) {
if (setA.has(elem)) {
_intersection.add(elem);
}
}
return _intersection;
}
//Examples
var setA = new Set([0,1,3,5,8,11,15,23,30]),
setB = new Set([2,3,4,8,9,16,17,20,21,23,25,28]),
setC = new Set([3,6,8,13,16,19,23,27,32]);
intersection(intersection(setA, setC),setB); //3,8,23
気になったので調べてみた。組み込みには無いね
http://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Set
function intersection(setA, setB) {
var _intersection = new Set();
for (var elem of setB) {
if (setA.has(elem)) {
_intersection.add(elem);
}
}
return _intersection;
}
//Examples
var setA = new Set([0,1,3,5,8,11,15,23,30]),
setB = new Set([2,3,4,8,9,16,17,20,21,23,25,28]),
setC = new Set([3,6,8,13,16,19,23,27,32]);
intersection(intersection(setA, setC),setB); //3,8,23
考えたんですが
n個の配列の1個目のコピーを用意
tmp[0,1,3,5,8,11,15,23,30]
tmpをループで後ろから
2個目.indexOf(30) == -1 なら tmp末尾削除
2個目.indexOf(23) == -1 なら tmp末尾削除
2個目.indexOf(15) == -1 なら tmp末尾削除
ってのを、3個目、4個目、... n個目と繰り返せば
ループ回数はどんどん減ってくことになるから
総ループ数は最短で済む、のかな?
あ、最初に用意するコピーは1個目じゃなく
lengthが一番小さいやつにするといいのか
n個の配列の1個目のコピーを用意
tmp[0,1,3,5,8,11,15,23,30]
tmpをループで後ろから
2個目.indexOf(30) == -1 なら tmp末尾削除
2個目.indexOf(23) == -1 なら tmp末尾削除
2個目.indexOf(15) == -1 なら tmp末尾削除
ってのを、3個目、4個目、... n個目と繰り返せば
ループ回数はどんどん減ってくことになるから
総ループ数は最短で済む、のかな?
あ、最初に用意するコピーは1個目じゃなく
lengthが一番小さいやつにするといいのか
>>598
const intersection = (...arrays) => {
const truthArrays = arrays.map(array => array.reduce((acc, n) => (acc[n] = true, acc), []))
const result = []
for (let i = 0; i <= Math.max(...arrays.flat()); i++) {
if (truthArrays.map(truthArray => truthArray[i]).every(v => v)) result.push(i)
}
return result
}
const a = [0,1,3,5,8,11,15,23,30]
const b = [2,3,4,8,9,16,17,20,21,23,25,28]
const c = [3,6,8,13,16,19,23,27,32]
intersection(a, b, c)
//=> [3, 8, 23]
const intersection = (...arrays) => {
const truthArrays = arrays.map(array => array.reduce((acc, n) => (acc[n] = true, acc), []))
const result = []
for (let i = 0; i <= Math.max(...arrays.flat()); i++) {
if (truthArrays.map(truthArray => truthArray[i]).every(v => v)) result.push(i)
}
return result
}
const a = [0,1,3,5,8,11,15,23,30]
const b = [2,3,4,8,9,16,17,20,21,23,25,28]
const c = [3,6,8,13,16,19,23,27,32]
intersection(a, b, c)
//=> [3, 8, 23]
あっ、
ループの度にMath.max(...arrays.flat())が評価されちゃうから↓の行は、
for (let i = 0; i <= Math.max(...arrays.flat()); i++) {
↓の二行に分けたほうがよかったゴメン
const maxNum = Math.max(...arrays.flat())
for (let i = 0; i <= maxNum; i++) {
ループの度にMath.max(...arrays.flat())が評価されちゃうから↓の行は、
for (let i = 0; i <= Math.max(...arrays.flat()); i++) {
↓の二行に分けたほうがよかったゴメン
const maxNum = Math.max(...arrays.flat())
for (let i = 0; i <= maxNum; i++) {
あっ、オブジェクト?
オブジェクトだったらもっと効率的に出きるかも知れないから例書いといてくれ。
オブジェクトだったらもっと効率的に出きるかも知れないから例書いといてくれ。
質問です
document内のエレメントに、何か自分用の印とかメモとかを付けたい時、
element.hogehoge="are";
とか
if(element.hogehoge=="are"){~
みたいに勝手に予約語にないプロパティ?を作って書き込んだり読み出したりしていいんでしょうか?
document内のエレメントに、何か自分用の印とかメモとかを付けたい時、
element.hogehoge="are";
とか
if(element.hogehoge=="are"){~
みたいに勝手に予約語にないプロパティ?を作って書き込んだり読み出したりしていいんでしょうか?
>>609
それは共同開発者に聞いてくれ
共同開発者がいないなら、本気でどうでもいい。好き放題やっていい
なんだったら独自要素作っても良い
<foo>独自要素です</foo>
SEO的にどう評価されるかは知らないけど
それは共同開発者に聞いてくれ
共同開発者がいないなら、本気でどうでもいい。好き放題やっていい
なんだったら独自要素作っても良い
<foo>独自要素です</foo>
SEO的にどう評価されるかは知らないけど
>>610
ありがとうございます
聞きたかったのは言語仕様としてまず可能なのかどうか(全てのブラウザ環境で使えるのか)だったので、OKのようですね。
こういうことは意外にJavascriptの入門書に書いてない気がします。
ありがとうございます。
ありがとうございます
聞きたかったのは言語仕様としてまず可能なのかどうか(全てのブラウザ環境で使えるのか)だったので、OKのようですね。
こういうことは意外にJavascriptの入門書に書いてない気がします。
ありがとうございます。
単なるオブジェクトへのプロパティの設定だから書いてあるだろ。
domから見たらエレメントは特別だがjsから見たら単なるオブジェクトの一種なんだし
domから見たらエレメントは特別だがjsから見たら単なるオブジェクトの一種なんだし
>>604
自力で実装するにしても最悪O(n^m)はさすがにキツいかなあ
自力で実装するにしても最悪O(n^m)はさすがにキツいかなあ
DOM に独自のプロパティを、勝手に追加したら、
DOMの仕様に適さなくなるから、DOMじゃなくなる
独自部分は、カスタムデータ属性を使うべき
DOMの仕様に適さなくなるから、DOMじゃなくなる
独自部分は、カスタムデータ属性を使うべき
lodash にある
複数の配列の積集合(共通する値)を取得する
_.intersection(array...)
_.intersection([1, 2, 3], [5, 2, 1, 4], [2, 1]);
// → [1, 2]
複数の配列の積集合(共通する値)を取得する
_.intersection(array...)
_.intersection([1, 2, 3], [5, 2, 1, 4], [2, 1]);
// → [1, 2]
「Webブラウザで動かすJS」以外、
たとえばNode環境とかTypeScriptとかの話って、このスレの範囲内?
やっぱ板チ?
たとえばNode環境とかTypeScriptとかの話って、このスレの範囲内?
やっぱ板チ?
>>621
スレあるよ。
活気はあんまりないけど
nodejs
http://mevius.5ch.net/test/read.cgi/tech/1518528093/
TypeScript
http://mevius.5ch.net/test/read.cgi/tech/1524746903/
スレあるよ。
活気はあんまりないけど
nodejs
http://mevius.5ch.net/test/read.cgi/tech/1518528093/
TypeScript
http://mevius.5ch.net/test/read.cgi/tech/1524746903/
アリガサンキュー
あくまで例なだけでTSやnodeだけの話じゃないんだけどね
あくまで例なだけでTSやnodeだけの話じゃないんだけどね
文字列に応じた処理分岐ってどうするのが一番いいの
パッと思いついたのは3案
案1 素直にif文
if(str === 'hoge') {
hogeFunc();
} else if(str === 'piyo') {
piyoFunc();
} else {
otherFunc();
}
案2 switch文
switch(str) {
case 'hoge': hogeFunc();
break;
case 'piyo': puyoFunc();
break;
default: otherFunc();
}
案3 連想配列
const obj = {
'hoge': hogeFunc,
'piyo': piyoFunc,
};
if(obj.hasOwnProperty(str)){
obj[str]();
} else {
otherFunc();
}
分岐数は大体20~30で、イベント絡みなので頻繁に呼ばれる可能性が高い
よろしくお願いします
パッと思いついたのは3案
案1 素直にif文
if(str === 'hoge') {
hogeFunc();
} else if(str === 'piyo') {
piyoFunc();
} else {
otherFunc();
}
案2 switch文
switch(str) {
case 'hoge': hogeFunc();
break;
case 'piyo': puyoFunc();
break;
default: otherFunc();
}
案3 連想配列
const obj = {
'hoge': hogeFunc,
'piyo': piyoFunc,
};
if(obj.hasOwnProperty(str)){
obj[str]();
} else {
otherFunc();
}
分岐数は大体20~30で、イベント絡みなので頻繁に呼ばれる可能性が高い
よろしくお願いします
>>626
計測してみたら
計測してみたら
[].slice()を使った配列の複製って
2次元配列以降は値渡しできないんだなぁ…
シンプルに多次元配列を複製する方法教えてください
2次元配列以降は値渡しできないんだなぁ…
シンプルに多次元配列を複製する方法教えてください
>>626
> 文字列に応じた処理分岐ってどうするのが一番いいの
まず速度は無視して一番コードが少なく可読性が高い方法で書く
9割以上はココまでで終わり
どうせ頻繁に呼ばれると言っても
1秒間に100回も呼ばれないだろ?
頻繁と言って良いのは10000回レベルからだぜ
> 文字列に応じた処理分岐ってどうするのが一番いいの
まず速度は無視して一番コードが少なく可読性が高い方法で書く
9割以上はココまでで終わり
どうせ頻繁に呼ばれると言っても
1秒間に100回も呼ばれないだろ?
頻繁と言って良いのは10000回レベルからだぜ
Ruby でも、clone, dup など、基本は、shallow copy(浅いコピー)で、
deep copy(深いコピー)は、Marshal.dump
Marshal.dumpは「オブジェクト ←→ 文字列」の変換だから、
文字列からインスタンスを作った際に、全く新しいインスタンスが作られる
JavaScript では、lodashの、cloneDeep がある
deep copy(深いコピー)は、Marshal.dump
Marshal.dumpは「オブジェクト ←→ 文字列」の変換だから、
文字列からインスタンスを作った際に、全く新しいインスタンスが作られる
JavaScript では、lodashの、cloneDeep がある
オブジェクトが要素の配列の複製ってやっぱ面倒なんやね
1人でずっとやってきたから俺がわかってないだけなのかと思ってた
複製が予想されるオブジェクトには
自分の複製インスタンスを返すメソッド持たせたりしてるんだけど
これは変なやり方?
1人でずっとやってきたから俺がわかってないだけなのかと思ってた
複製が予想されるオブジェクトには
自分の複製インスタンスを返すメソッド持たせたりしてるんだけど
これは変なやり方?
内部の状態を変えないなら複製の必要もない
内部の状態を変えたくなったらインスタンスごと作り直せば元のインスタンスの中身は変わらない
そのためにはクラス定義をなるべく小さなものにすること
要はValueObjectよ
内部の状態を変えたくなったらインスタンスごと作り直せば元のインスタンスの中身は変わらない
そのためにはクラス定義をなるべく小さなものにすること
要はValueObjectよ
tableを100個くらいまとめて作るには
for(n=1;n<=100;n++){
document.write("<table><tr><td>aaa</td></tr></table>");
}
のようにdocument.writeでやるしかないんですか?*
for(n=1;n<=100;n++){
document.write("<table><tr><td>aaa</td></tr></table>");
}
のようにdocument.writeでやるしかないんですか?*
>>644
通じるかどうかで迷ってん
通じるかどうかで迷ってん
document.write使うなし
今のブラウザだとdocument.writeされるたびに全体が再描画されて極端に速度低下する場合があるので
素直にdocumentFragment作ってからappendChildするなり全部文字列で連結してからinnerHTMLに突っ込め
今のブラウザだとdocument.writeされるたびに全体が再描画されて極端に速度低下する場合があるので
素直にdocumentFragment作ってからappendChildするなり全部文字列で連結してからinnerHTMLに突っ込め
怖いhttps://twitter.com/chordbug/status/1092824833816170496
(deleted an unsolicited ad)
(deleted an unsolicited ad)
>>648
文字列結合してから最後に一回だけdocument.writeすればいいだけ
文字列結合してから最後に一回だけdocument.writeすればいいだけ
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
みんなの評価 : 類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.131 + (1000) - [97%] - 2017/1/25 8:01
- + JavaScript の質問用スレッド vol.135 + (1002) - [97%] - 2018/11/23 10:30
- + JavaScript の質問用スレッド vol.130 + (974) - [97%] - 2016/10/26 14:18
- + JavaScript の質問用スレッド vol.130 + (1001) - [97%] - 2017/11/25 20:45
- + JavaScript の質問用スレッド vol.117 + (1009) - [97%] - 2014/8/5 3:30
- + JavaScript の質問用スレッド vol.131 + (1004) - [97%] - 2018/3/7 13:30
- + JavaScript の質問用スレッド vol.132 + (1001) - [97%] - 2018/4/19 11:00
- + JavaScript の質問用スレッド vol.107 + (1001) - [97%] - 2013/9/7 10:16
- + JavaScript の質問用スレッド vol.133 + (1001) - [97%] - 2018/6/8 10:45
- + JavaScript の質問用スレッド vol.134 + (1001) - [97%] - 2018/8/3 23:15
- + JavaScript の質問用スレッド vol.136 + (1001) - [97%] - 2019/1/8 11:30
- + JavaScript の質問用スレッド vol.138 + (1004) - [97%] - 2019/4/20 23:45
- + JavaScript の質問用スレッド vol.139 + (1001) - [97%] - 2019/5/27 15:15
- + JavaScript の質問用スレッド vol.127 + (1001) - [97%] - 2016/2/4 0:15
- + JavaScript の質問用スレッド vol.127 + (160) - [97%] - 2021/7/16 9:30
- + JavaScript の質問用スレッド vol.113 + (1001) - [95%] - 2014/3/15 21:30
- + JavaScript の質問用スレッド vol.118 + (1002) - [95%] - 2014/8/29 22:30
トップメニューへ / →のくす牧場書庫について