のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,434,794人
昨日:no data人
今日:
最近の注目
人気の最安値情報

私的良スレ書庫

不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

元スレ+ JavaScript の質問用スレッド vol.96 +

JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
レスフィルター : (試験中)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
1 : Name_Not - 2012/01/17(火) 17:05:00.57 ID:??? (+93,+29,+0)
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-4のテンプレを読んだ上で質問してください。

■質問を書く上で
(1) 質問にならない投稿はご遠慮ください。(煽り、コード制作依頼など)
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
  (ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 長い間連続して質問する場合にレス番を名前にしてあれば、質問の流れが回答者に伝わりやすくなります。
(4) 常に自発的に調べる心構えを持ってください。
  具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
  わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
  ※必ず「問題の事象が再現されること」を確認してください。
   必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合はhttp://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。質問テンプレートを活用してみてください。

■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。(ex: IE8, Firefox4)
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。(Windows なら「コピット」を活用)
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
 1レスに収まらないならコード投稿サイトを利用してください。
 http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/
3 : Name_Not - 2012/01/17(火) 17:09:56.28 ID:??? (+40,-30,+0)
■主要FAQ (全部はhttp://fiddle.jshell.net/vSqKr/30/show/ )
Q1. 別窓・フレーム内容やローカルファイルを読み書きしたいのですが…
A1. 別サーバのページやファイルの内容はセキュリティ制約でアクセス不可です。
Q2. document.write()でページ内容を追加したいのですが…
A2. 一度表示完了後にwriteするとページ内容が消去されます。DOM等別手段を。
Q3. table内容のinnerHTMLやDOMでの変更がうまく行かないのですが…
A3. IEではtable/tbody/trのinnerHTML書き換え不可です。DOMを使いますが、
  DOMの場合tableの直下にはtbody要素が(作らなくても)あることに注意。
Q4. フォーム部品名を変数にした「...myform.変数名.value」が動きません…
A4. 「document.forms.myform.elements[変数名].value」でどぞ。
  JavaScriptでは一般に「obj.x」と「obj['x']」は同じ意味です。
  グローバル変数はwindowのプロパティなので「x」と「window['x']」も。
Q5. CSSで設定した背景色がe.style.backgroundColorで取得できないのですが…
A5. 取得には document.defaultView.getComputedStyle() を使う必要あり。
  IEでは要素オブジェクトのプロパティcurrentStyleを使う。
Q6. setAttribute("class","foo")、setAttribute("onclick","bar()")が動きません…
A6. IEではそれは不可。「obj.className="foo"」「obj.onclick=bar」でどぞ。
Q7. タイマーやイベントハンドラに設定するコードにthisを含めたいのですが
  「"...this..."」とか「function(){...this...}」ではうまく行きません。
A7. 実行時にthisが別のものを指してしまってる。以下のようにthisを束縛保存。
  「function(x){return function(){...x...};}(this)」
Q8. input type="file"の値を設定(参照)できないのですが…
A8. セキュリティ制約のため設定は絶対に不可。参照はブラウザにより不可。
Q9. getElementById('ID名')や$('ID名')で要素が取れないのですが…
A9. コード実行時点でHTMLがそこまで読まれてない。window.onload 中でやるとか。
4 : Name_Not - 2012/01/17(火) 17:11:10.97 ID:??? (+11,-30,-199)
5 : Name_Not - 2012/01/17(火) 17:15:58.55 ID:??? (+192,-29,-17)
配列が二つあるんですが、その片方にしか入っていない値を求めるにはどうすればいいですか?
たとえば、A=1,2,3 B=2,3,4 だとすると、結果は1,4になります。
6 : Name_Not - 2012/01/17(火) 17:17:45.17 ID:??? (-1,-29,-16)
■前々スレ
+ JavaScript の質問用スレッド vol.94 +
http://toro.2ch.net/test/read.cgi/hp/1325400523/
7 : Name_Not - 2012/01/17(火) 17:19:38.65 ID:??? (+37,-30,-66)
>>5
var a = [1,2,3];
var b = [2,3,4];
var c = [];
var f = 0;
for (var i=0; i<a.length; i++) {
for (var k=0; k<b.length; k++) {
if (a[i] == b[k]) {
c[f++] = a[i];
break;
}
}
}
8 : Name_Not - 2012/01/17(火) 17:21:54.18 ID:??? (+35,-30,-183)
var A1 = new Object(), B1 = new Object(), C = [];
for(var i = 0; i < A.length; ++i) A1[A[i]] = true;
for(var i = 0; i < B.length; ++i) B1[B[i]] = true;
for(var i = 0; i < A.length; ++i) if(!B1[A[i]]) C.push(A[i]);
for(var i = 0; i < B.length; ++i) if(!A1[B[i]]) C.push(B[i]);
うーん長いね。でもこれくらいしか思いつかない。
数値に限られるのならsort()して端から見るとかかな。
9 : Name_Not - 2012/01/17(火) 17:27:22.51 ID:??? (+93,+27,-8)
>>8
そのコードでも数値とか基本型に限定されると思う
10 : Name_Not - 2012/01/17(火) 17:27:30.87 ID:??? (+62,+29,-10)
>>7 全然違うんじゃないの? それだとAとBで共通のをCに入れてるよね?
11 : Name_Not - 2012/01/17(火) 17:28:40.59 ID:??? (+39,-30,-68)
var a = [1,2,3];
var b = [2,3,4];
var c = [];
var f = 0;
for (var i=0; i<a.length; i++) {
for (var k=0; k<b.length; k++) {
if (a[i] != b[k]) {
c[f++] = a[i];
break;
}
}
}
12 : Name_Not - 2012/01/17(火) 17:29:54.41 ID:??? (+39,+12,+0)
13 : Name_Not - 2012/01/17(火) 17:30:26.75 ID:??? (+70,+29,-7)
>>9 そうでした。つかその前提を明確にしてくれないと書けないよね。
14 : Name_Not - 2012/01/17(火) 17:31:49.13 ID:??? (+3,-29,-14)
>>12
array_uniqueとは違うでしょ
15 : Name_Not - 2012/01/17(火) 17:38:05.55 ID:??? (-4,-23,-1)
>>11でFA
16 : Name_Not - 2012/01/17(火) 17:39:13.22 ID:??? (+63,+29,-11)
>>11 あのさあ、自分とこで実行して確認してから回答しようよ。あんまりだ。
17 : Name_Not - 2012/01/17(火) 17:44:53.97 ID:??? (+7,-30,-229)
もし配列AもBも昇順に整列されている数値だということなら以下で。
<!DOCTYPE html>
<html><head><title>???</title>
</head><body>
<script type="text/javascript">
var a = [1,2,3], b = [2,3,4], c = [], ap = 0, bp = 0;
while(ap < a.length || bp < b.length) {
if(ap >= a.length) { c.push(b[bp++]); }
else if(bp >= b.length) { c.push(a[ap++]); }
else if(a[ap] == b[bp]) { ++ap; ++bp; }
else if(a[ap] < b[bp]) { c.push(a[ap++]); }
else { c.push(b[bp++]); }
}
document.writeln(c.join(" "));
</script>
</body></html>
18 : 5 - 2012/01/17(火) 17:47:30.10 ID:??? (+39,-30,-18)
>>17
オブジェクトにも対応できるようにしてほしいです。たとえば、[{}, Array]と[{}, Array]では[{}, {}]になります。
19 : 5 - 2012/01/17(火) 17:50:19.69 ID:??? (-1,-29,-27)
追記です。↑の結果の{}はそれぞれ入力の配列内のオブジェクトを指しています。
20 : Name_Not - 2012/01/17(火) 17:51:09.48 ID:??? (+62,+29,-20)
>>18
そりゃもう、しらみつぶしにやるしかないでしょ。そろそろ自分で書いたら?
21 : Name_Not - 2012/01/17(火) 17:54:20.67 ID:??? (+44,+26,-14)
宿題厨うぜえな
22 : Name_Not - 2012/01/17(火) 17:58:14.60 ID:??? (+70,-30,-23)
Objectの比較って面倒だぞ。{} == {} で判断できるわけではないから
var a = { x: 1, y: 1... }, b = { x: 1, y: 2... };
a.x == b.x
a.y == b.y ...
と、調べていくしかない
23 : 5 - 2012/01/17(火) 18:00:10.60 ID:??? (+93,+29,-42)
>>22
この手の実装では === で比較するのが慣例ですね。内部の状態を見るんじゃなくて、
ただ参照が一致するかどうか、これがオブジェクト比較の原則です。
24 : Name_Not - 2012/01/17(火) 18:02:31.80 ID:??? (+2,-29,-20)
配列の中身をtoJSONして比較したらいいんじゃないかね
25 : Name_Not - 2012/01/17(火) 18:02:51.49 ID:??? (+67,+29,-14)
>>22
そういう話じゃないだろアホ
26 : Name_Not - 2012/01/17(火) 18:05:40.94 ID:??? (+64,+28,+0)
>>23
もうできるよね
27 : Name_Not - 2012/01/17(火) 18:05:47.50 ID:??? (+31,+13,-1)
28 : 5 - 2012/01/17(火) 18:08:53.16 ID:??? (+27,-28,-48)
>>24
jsonに流し込むと、全てのオブジェクトが基本型に変換されます。
29 : Name_Not - 2012/01/17(火) 18:18:55.90 ID:??? (+49,+22,+0)
>>28
だから何?
30 : Name_Not - 2012/01/17(火) 18:20:49.16 ID:??? (+9,-30,-145)
これでどう?

var AB=A.concat(B);
F:for(var ab=AB.length-1;ab>=0;ab--){
var ABab=AB[ab];
for(var a=A.length-1;a>=0;a--){
if(ABab===A[a]){AB.splice(ab,1);continue F;}}
for(var b=B.length-1;b>=0;b--){
if(ABab===B[b]){AB.splice(ab,1);continue F;}}
}
31 : Name_Not - 2012/01/17(火) 18:24:38.89 ID:??? (+3,-30,-156)
確認してないけどこんな感じで

function 二配列非重複要素取出君(A,B){
var AB=A.concat(B);
F:for(var ab=AB.length-1;ab>=0;ab--){
var ABab=AB[ab];
for(var a=A.length-1;a>=0;a--){
if(ABab===A[a]){AB.splice(ab,1);continue F;}}
for(var b=B.length-1;b>=0;b--){
if(ABab===B[b]){AB.splice(ab,1);continue F;}}
}
return AB;
}
32 : 5 - 2012/01/17(火) 18:25:51.81 ID:??? (+94,-30,-150)
>>30
>>18のケースで動作しないですね。今回は自己解決しました。
速度面を考慮するともう少し複雑になるでしょうね。ありがとうございました。
var diff = function(arrayA, arrayB) {
  var result = [];
  var array = arrayA.concat(arrayB);
  for (var i = 0; i < array.length; i++) {
    var value = array[i];
    var index = array.indexOf(value);
    if (array.indexOf(value, index+1) === -1) {
      result.push(value);
    }
  }
  return result;
};
33 : Name_Not - 2012/01/17(火) 18:26:24.84 ID:??? (+84,+25,-72)
すいませんChromで利用できるコンソールのconsole.logとかそういうのありますよね
これ以外にもどういうのが使えるのか知りたいのですが公式ドキュメントのどこに載ってますか?
34 : Name_Not - 2012/01/17(火) 18:29:35.63 ID:??? (+96,+29,-1)
>>32
なにこれ
超レアケースでしか機能しないんだけど
35 : Name_Not - 2012/01/17(火) 18:31:35.91 ID:??? (+38,+2,-1)
>>32
indexOfって。。。まあ解決したんならいいけど
36 : Name_Not - 2012/01/17(火) 18:34:03.24 ID:??? (+3,-30,-63)
あるブラウザでArray.prototype.someが対応しているか調べたいのですが
if (Array.prototype.some) {
} else {
}
これよりもっとベストな書き方を教えてください
37 : Name_Not - 2012/01/17(火) 18:35:53.19 ID:??? (-6,-29,+0)
'some' in []
38 : Name_Not - 2012/01/17(火) 18:38:18.02 ID:??? (+63,+28,+0)
39 : 5 - 2012/01/17(火) 18:39:29.50 ID:??? (+70,+29,-7)
>>34
明日には実働アプリに投入するので、反例コードもらえると助かります。
40 : Name_Not - 2012/01/17(火) 18:44:23.69 ID:??? (+55,-30,-221)
>>32
これでどうかな

function 重複抜出(){
var RA=Array.apply(null,A);
var RB=Array.apply(null,B);

Fa:for(var r=RA.length-1;r>=0;r--){
var RAr=RA[r];
for(var b=B.length-1;b>=0;b--){
if(RAr===B[b]){RA.splice(r,1);continue Fa;}}
}

Fb:for(var r=RB.length-1;r>=0;r--){
var RBr=RB[r];
for(var a=A.length-1;a>=0;a--){
if(RBr===A[a]){RB.splice(r,1);continue Fb;}}
}
;

return RA.concat(RB);
}
41 : 5 - 2012/01/17(火) 18:46:41.92 ID:??? (+94,+29,-10)
>>40
OKですね。こちらで用意してあるテストコードはクリアしましたよ。
42 : Name_Not - 2012/01/17(火) 18:54:11.94 ID:??? (+41,-30,-41)
>>32
動かないコード貼って何がしたいの?

TypeError : indexOf is not a function.
Array.prototype.indexOf //undefined
43 : Name_Not - 2012/01/17(火) 18:57:00.75 ID:??? (+67,+29,-13)
>>42
まてまてwそこはいくらでも置き換えが聞くと思うぞ。
てかブラウザ何使ってる?
http://kangax.github.com/es5-compat-table/
44 : Name_Not - 2012/01/17(火) 19:04:19.97 ID:??? (+28,-29,-56)
addEventListenerってchromeのhtml5のプラグイン入れてればIE6以上でも使えますよね?
45 : Name_Not - 2012/01/17(火) 19:09:41.56 ID:??? (+54,+22,-46)
>>44
知らんかったからググったけど「Chrome Frame」ってやつか
GoogleさんがIE6の面倒見てるなんて、ちょっと面白いな
46 : Name_Not - 2012/01/17(火) 19:11:43.42 ID:??? (+7,-29,-14)
>>43
なら置き換えたコードだせよ
動かんからおかしさを指摘しようがないだろ

Property access on stringsしかYESにならんブラウザも沢山あるんだぞ
47 : Name_Not - 2012/01/17(火) 19:12:09.22 ID:??? (+65,+22,-11)
>>41
一方の配列に重複する要素があったらおかしくないけ?
48 : Name_Not - 2012/01/17(火) 19:14:17.69 ID:??? (+99,+29,-5)
>47
お前>5読んだ上でそれ言ってるんだよね?w
49 : Name_Not - 2012/01/17(火) 19:17:26.78 ID:??? (+53,+19,-9)
>>48
は?バカなの?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

類似してるかもしれないスレッド


トップメニューへ / →のくす牧場書庫について