元スレ+ JavaScript の質問用スレッド vol.96 +
JavaScript覧 / PC版 /みんなの評価 :
1 = :
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 = :
■主要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 = :
■各種仕様 (http://fiddle.jshell.net/vSqKr/30/show/#Link も参照 )
Standard ECMA-262
http://www.ecma-international.org/publications/standards/ECMA-262.HTM
ECMAScript 3
http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/ (和訳)
ECMAScript 5.1
http://es5.github.com/
ECMAScript 5 compatibility table
http://kangax.github.com/es5-compat-table/
HTML Standard (HTML5)
http://www.whatwg.org/html5
W3C Document Object Model Technical Reports
http://www.w3.org/DOM/DOMTR
JavaScript 1.5 ガイド / リファレンス (Netscape/Mozilla)
http://developer.mozilla.org/ja/JavaScript/Guide
http://developer.mozilla.org/ja/JavaScript/Reference
JavaScript Garden (ja)
http://bonsaiden.github.com/JavaScript-Garden/ja/
JSON (JavaScript Object Notation)
http://www.json.org/json-ja.html
Gecko DOM Reference
http://developer.mozilla.org/ja/Gecko_DOM_Reference (和訳)
http://devedge-temp.mozilla.org/central/javascript/index_en.html
MSDN Library JScript
http://msdn.microsoft.com/ja-jp/library/z688wt03.aspx
5 = :
配列が二つあるんですが、その片方にしか入っていない値を求めるにはどうすればいいですか?
たとえば、A=1,2,3 B=2,3,4 だとすると、結果は1,4になります。
7 = :
>>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 = :
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 = :
>>8
そのコードでも数値とか基本型に限定されると思う
10 = :
>>7 全然違うんじゃないの? それだとAとBで共通のをCに入れてるよね?
11 = :
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 = :
配列を連結してから↓
http://d.hatena.ne.jp/bennylee/20090406/1239011327
13 = :
>>9 そうでした。つかその前提を明確にしてくれないと書けないよね。
14 = :
>>12
array_uniqueとは違うでしょ
16 = :
>>11 あのさあ、自分とこで実行して確認してから回答しようよ。あんまりだ。
17 = :
もし配列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 = :
>>17
オブジェクトにも対応できるようにしてほしいです。たとえば、[{}, Array]と[{}, Array]では[{}, {}]になります。
20 = :
>>18
そりゃもう、しらみつぶしにやるしかないでしょ。そろそろ自分で書いたら?
21 = :
宿題厨うぜえな
22 = :
Objectの比較って面倒だぞ。{} == {} で判断できるわけではないから
var a = { x: 1, y: 1... }, b = { x: 1, y: 2... };
a.x == b.x
a.y == b.y ...
と、調べていくしかない
23 = :
>>22
この手の実装では === で比較するのが慣例ですね。内部の状態を見るんじゃなくて、
ただ参照が一致するかどうか、これがオブジェクト比較の原則です。
24 = :
配列の中身をtoJSONして比較したらいいんじゃないかね
25 = :
>>22
そういう話じゃないだろアホ
26 = :
>>23
もうできるよね
27 = :
あ
28 = :
>>24
jsonに流し込むと、全てのオブジェクトが基本型に変換されます。
29 = :
>>28
だから何?
30 = :
これでどう?
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 = :
確認してないけどこんな感じで
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 = :
>>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 = :
すいませんChromで利用できるコンソールのconsole.logとかそういうのありますよね
これ以外にもどういうのが使えるのか知りたいのですが公式ドキュメントのどこに載ってますか?
34 = :
>>32
なにこれ
超レアケースでしか機能しないんだけど
35 = :
>>32
indexOfって。。。まあ解決したんならいいけど
36 = :
あるブラウザでArray.prototype.someが対応しているか調べたいのですが
if (Array.prototype.some) {
} else {
}
これよりもっとベストな書き方を教えてください
38 = :
>>33
ここにあるはず
http://code.google.com/intl/ja/chrome/devtools/docs/overview.html
39 = :
>>34
明日には実働アプリに投入するので、反例コードもらえると助かります。
40 = :
>>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 = :
>>40
OKですね。こちらで用意してあるテストコードはクリアしましたよ。
42 = :
>>32
動かないコード貼って何がしたいの?
TypeError : indexOf is not a function.
Array.prototype.indexOf //undefined
43 = :
>>42
まてまてwそこはいくらでも置き換えが聞くと思うぞ。
てかブラウザ何使ってる?
http://kangax.github.com/es5-compat-table/
44 = :
addEventListenerってchromeのhtml5のプラグイン入れてればIE6以上でも使えますよね?
45 = :
>>44
知らんかったからググったけど「Chrome Frame」ってやつか
GoogleさんがIE6の面倒見てるなんて、ちょっと面白いな
46 = :
>>43
なら置き換えたコードだせよ
動かんからおかしさを指摘しようがないだろ
Property access on stringsしかYESにならんブラウザも沢山あるんだぞ
47 = :
>>41
一方の配列に重複する要素があったらおかしくないけ?
48 = :
49 = :
>>48
は?バカなの?
類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.95 + (1001) - [97%] - 2012/1/17 4:16
- + JavaScript の質問用スレッド vol.86 + (1001) - [97%] - 2011/5/27 21:50
- + JavaScript の質問用スレッド vol.76 + (1001) - [97%] - 2010/3/10 4:02
- + JavaScript の質問用スレッド vol.99 + (1001) - [97%] - 2012/5/7 4:32
- + JavaScript の質問用スレッド vol.98 + (1001) - [97%] - 2012/4/9 14:46
- + JavaScript の質問用スレッド vol.97 + (1001) - [97%] - 2012/3/1 3:31
- + JavaScript の質問用スレッド vol.94 + (1001) - [97%] - 2012/1/8 15:46
- + JavaScript の質問用スレッド vol.93 + (1001) - [97%] - 2012/1/1 4:46
- + JavaScript の質問用スレッド vol.93 + (1001) - [97%] - 2011/12/10 18:31
- + JavaScript の質問用スレッド vol.90 + (1001) - [97%] - 2011/11/15 20:32
- + JavaScript の質問用スレッド vol.90 + (1001) - [97%] - 2011/10/26 4:18
- + JavaScript の質問用スレッド vol.126 + (348) - [95%] - 2023/1/12 17:00
- + JavaScript の質問用スレッド vol.126 + (952) - [95%] - 2015/11/18 13:15
- + JavaScript の質問用スレッド vol.106 + (1001) - [95%] - 2013/7/20 9:30
- + JavaScript の質問用スレッド vol.116 + (1002) - [95%] - 2014/7/1 0:45
- + JavaScript の質問用スレッド vol.136 + (1001) - [95%] - 2019/1/8 11:30
- + JavaScript の質問用スレッド vol.85 + (1001) - [95%] - 2011/4/25 21:32
トップメニューへ / →のくす牧場書庫について