我是javascript的新手,希望能够在两个数组中的不同字符串之间进行逻辑OR,这样如果user-inputA等于array1中的字符串,并且user-inputB等于array2中的字符串它打印两个字符串。
每个阵列有4个字符串。
我已经弄清楚如何只使用两个变量而不是数组,并使用一堆if语句如下:
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")}
但我现在想使用数组而不是只有一个sname和一个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
我希望尽可能减少这一点(就我已经知道/将要学习的关键词和语法而言)而不是有人完整地重写我的代码,尽管他们可能会做得更好。 也许theres就像一个新关键字才能做到这一点? 我听说过indexof()但是不能判断它是否合适。
答案 0 :(得分:3)
如果你有一个数组,例如
var a = ["doe", "richie", "lee", "gates"];
...您可以通过a.indexOf(theString) != -1
或(在较新的JavaScript引擎上)a.includes(theString)
检查字符串是否在该数组中。
所以,尽可能少地改变:
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");
}
(或者,我们可以再次使用if (fnames.includes(fname) && snames.includes(sname))
。)
当然,这会很高兴地提醒"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");
}
这要求数组的顺序相同。
如果您正在进行配对匹配,最好使用单个对象数组和Aray#some
:
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");
}
......使用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");
}
旁注:男人的名字是Tim Berners-Lee,而不是Tim Lee。仅使用带连字符的部分名称与完全使用其他名称一样不正确。 : - )
答案 1 :(得分:0)
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");
}
答案 2 :(得分:0)
另一种写作方式,虽然我知道你并不想完全重写你的代码。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
vc:minVersion="1.1">
<xs:element name="root" type="root"></xs:element>
<xs:complexType name="root">
<xs:sequence>
<xs:element name="P1Message"
type="p1Message">
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="p1Message">
<xs:sequence>
<xs:element name="Hdr" type="hdr"></xs:element>
<xs:element name="Inf" type="inf"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="hdr">
<xs:sequence>
<xs:element name="I1Agt" type="i1Agt"></xs:element>
<xs:element name="SequenceNum" type="xs:string"></xs:element>
<xs:element name="SessionNum" type="xs:string"></xs:element>
<xs:element name="MsgTyp" type="xs:string"></xs:element>
<xs:element name="IntComment" type="xs:string"></xs:element>
</xs:sequence>
<xs:assert test="LclInstrm or not(MsgTyp = '103')"/>
</xs:complexType>
<xs:complexType name="i1Agt">
<xs:sequence>
<xs:element name="FinInstnId" type="finInstnId"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="finInstnId">
<xs:sequence>
<xs:element name="B1" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="inf">
<xs:sequence>
<xs:element name="PmtTpInf" type="pmtTpInf"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="pmtTpInf">
<xs:sequence>
<xs:element name="LclInstrm" type="xs:string" minOccurs="0" maxOccurs="1"></xs:element>
<xs:element name="Svc" type="svc"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="svc">
<xs:sequence>
<xs:element name="Cd" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>