2017-03-23 4 views
0

私はjavascriptを初めて使い、2つの配列の異なる文字列間で論理和を取ることができるようにします。つまり、user-inputAがarray1の文字列と等しい場合、user-inputBがarray2の文字列と等しく、両方の文字列を出力します。javadriptのarrrayから選択する

配列あたり4つの文字列があります。

私は次のようにではなく配列よりも、単に2つの変数を持つ、そしてたstatments場合の束を使用することによってそれを行う方法を考え出した:

var fname = prompt(), sname = prompt() 
if (fname === "john" && sname === "doe") 
{alert("Hello john doe")} 
else if (fname === "dennis" && sname === "richie") 
{alert("Hello dennis richie")} 
else if (fname === "tim" && sname === "lee") 
{alert("Hello tim lee")} 
else if (fname === "bill" && sname === "gates") 
{alert("Hello bill gates")} 
else 
{alert("name not found")} 

をしかし、私は今のアレイを使用したいだけではなくなるでしょう1つのsnameと1つのfname。おそらくのようなもの:

if ([0] in fname && [0] in sname) {alert(fname[0] + " " + sname[0])} 
if ([1] in fname && [1] in sname) {alert(fname[1] + " " + sname[1])} 
if ([2] in fname && [2] in sname) {alert(fname[2] + " " + sname[2])} 
if ([3] in fname && [3] in sname) {alert(fname[3] + " " + sname[3])} 
//each array has 4 strings 

は、私は、彼らはおそらくだろうけれども、誰かがcompletley、私のコードを書き換えるのではなく(まもなく学びます/キーワードおよび構文の面で、私はすでに知っている)可能な限り最小限に抑え、これを維持したいのですがそれは良い。 これを行うには、新しいキーワードが好きかもしれませんか? 私はindexof()について聞いたことがありますが、これが適切かどうかはわかりません。

+0

どのような配列ですか?上記の配列は表示されません。 –

+0

私はそれを意味のある方法で追加する方法を知らない。しかし私はそれを並べ替えに含めましたが、擬似コードとして –

+1

私はそれが私たちの配列の内容の例を示すのに役立つと思う。それぞれの配列にforenames、または単に姓、またはその両方が含まれているかどうかはわかりません。 – Joe

答えて

3

インスタンス

var a = ["doe", "richie", "lee", "gates"]; 

の配列を、持っている場合、文字列は、(新しいJavaScriptエンジン上)a.indexOf(theString) != -1を経由してその配列である場合、または...あなたは確認することができa.includes(theString)

だから、できるだけ変更:(。または、もう一度、私たちはif (fnames.includes(fname) && snames.includes(sname))を使用することができます)もちろん

var fnames = ["john", "dennis", "tim", "bill"]; 
 
var snames = ["doe", "richie", "lee", "gates"]; 
 
var fname = prompt(), sname = prompt(); 
 
if (fnames.indexOf(fname) != -1 && snames.indexOf(sname) != -1) { 
 
    alert("Hello " + fname + " " + sname); 
 
} else { 
 
    alert("Name not found"); 
 
}

、それは"Hello tim richie"喜んで警告が表示されます。

あなたがして、一致するペアをチェックしたい場合:

var fnames = ["john", "dennis", "tim", "bill"]; 
 
var snames = ["doe", "richie", "lee", "gates"]; 
 
var fname = prompt(), sname = prompt(); 
 
var fnameIndex = fnames.indexOf(fname) 
 
if (fnameIndex != -1 && snames.indexOf(sname) == fnameIndex) { 
 
    alert("Hello " + fname + " " + sname); 
 
} else { 
 
    alert("Name not found"); 
 
}

配列が同じ順序であることが必要です。

var names = [ 
 
    {fname: "john", sname: "doe"}, 
 
    {fname: "dennis", sname: "richie"}, 
 
    {fname: "tim", sname: "lee"}, 
 
    {fname: "bill", sname: "gates"} 
 
]; 
 
var fname = prompt(), sname = prompt(); 
 
if (names.some(function(entry) { 
 
    return entry.fname == fname && entry.sname == sname; 
 
})) { 
 
    alert("Hello " + fname + " " + sname); 
 
} else { 
 
    alert("Name not found"); 
 
}

...にたくさん見える:あなたはペアマッチングをやっている場合は

、しかし、単一オブジェクトの配列とAray#someを使用する方が良いだろうES2015の矢印機能付きクリーナ:

const names = [ 
 
    {fname: "john", sname: "doe"}, 
 
    {fname: "dennis", sname: "richie"}, 
 
    {fname: "tim", sname: "lee"}, 
 
    {fname: "bill", sname: "gates"} 
 
]; 
 
const fname = prompt(), sname = prompt(); 
 
if (names.some(e => e.fname == fname && e.sname == sname)) { 
 
    alert("Hello " + fname + " " + sname); 
 
} else { 
 
    alert("Name not found"); 
 
}


サイドノート:男の名前はティム・バーナーズ=リーはなく、ティム・リーです。ハイフネーションされた名前の一部のみを使用することは、まったく別の名前を使用する場合と同じです。 :-)

0

私はあなたが完全にあなたのコードを書き直したくありませんでした知っているものの、Array.find()

var userInput = [prompt(), 
 
    prompt() 
 
]; 
 
var names = [ 
 
    ["john", "doe"], 
 
    ["dennis", "richie"], 
 
    ["tim", "lee"], 
 
    ["bill", "gates"] 
 
]; 
 

 
var print = names.find(function(e) { 
 
    if (e[0] == userInput[0] && e[1] == userInput[1]) { 
 
    return e; 
 
    } 
 
}); 
 

 
if (print != undefined) { 
 
    alert("hello " + userInput[0] + " " + userInput[1]); 
 
} else { 
 
    alert("name not found"); 
 
}

0

それを書いて別の方法を使用してソリューションを提供します。

関連する問題