Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 建立成对值数组_Javascript_Arrays - Fatal编程技术网

Javascript 建立成对值数组

Javascript 建立成对值数组,javascript,arrays,Javascript,Arrays,我读了几本关于Javascript的书,在网上搜索了很多(最好的答案似乎在stackoverflow),但我仍然不确定如何继续 我想要的是在Javascript/HTML应用程序中设置2-4名玩家,以便它知道玩家的真实姓名,分配别名(后来是化身,但现在不是)、起点和转弯 在约翰·达克特(John Duckett)、Javascript和JQuery的一本书中,我了解到我可以使用数组或对象。这些是相似的,但工作方式略有不同 对于数组,我可能会有如下内容: var players= {

我读了几本关于Javascript的书,在网上搜索了很多(最好的答案似乎在stackoverflow),但我仍然不确定如何继续

我想要的是在Javascript/HTML应用程序中设置2-4名玩家,以便它知道玩家的真实姓名,分配别名(后来是化身,但现在不是)、起点和转弯

在约翰·达克特(John Duckett)、Javascript和JQuery的一本书中,我了解到我可以使用数组或对象。这些是相似的,但工作方式略有不同

对于数组,我可能会有如下内容:

    var players= {
    Timmy = {alias: "Spike", turns:0}
     (and so on)
}
 var players= {
        Timmy = {alias: "Spike", turns:0}
        /* and so on */
    }
对于一个对象,我显然可以这样做:

    var players= {
    Timmy = {alias: "Spike", turns:0}
     (and so on)
}
 var players= {
        Timmy = {alias: "Spike", turns:0}
        /* and so on */
    }
我不确定哪一个是最好的,但我倾向于阵列。我陷入困境的地方是,我很难弄清楚如何建立每个玩家,并用值创建和填充数组,其中一些值将从列表中随机选择(这部分我可以处理)

所以我试着从一个基本的实验开始(到目前为止还不起作用),这个实验的交互性比我正在构建的其他东西要小,并且用成对的元素填充数组。从“名称”和“转角”的值开始(都从0开始),我有以下内容:

var p1=“比利”;
var p2=“米奇”;
var p3=“Sammy”;
var p4=“”;
var playerList=[];
createPList();
函数pListConstructor(名称、别名、圈数){
this.name=name;
this.alias=alias;
这个.转身=转身;
}
函数别名选择器(){
返回别名
}
函数createPList(){
如果(p1!==“”){
playerList.push({pName:p1});
}
如果(p2!==“”){
playerList.push({pName:p2});
}
如果(p3!==“”){
playerList.push({pName:p3});
}
如果(p4!==“”){
playerList.push({pName:p4});;
}
document.getElementById(“player1Disp”).innerHTML=playerList[0]。名称;
document.getElementById(“player2Disp”).innerHTML=playerList[1]。名称;
document.getElementById(“player3Disp”).innerHTML=playerList[2]。名称;
document.getElementById(“player4Disp”).innerHTML=playerList[3]。名称;

}
基本上,您的两个示例是相同的,既不定义对象也不定义数组:)

如果我是你,我会这么做(但我不是,所以我可能大错特错):

首先,忘掉JavaScript,看看您在功能上需要什么

我想您希望有一个具有一些属性和方法的player对象。
然后我假设你想要一个玩家数组(或者一个列表,如果你想要的话,但无论如何,不是一个代表每个玩家的不同姿态的对象)

现在的问题是,如何在JS中做到这一点

基本上JS语法是非常通用的。例如,您可以使用“对象”表示法(
o.p)或“关联数组”表示法(
o[“p”])来命名对象的属性

重要的一点是,对象不仅由其内容定义,还由其类定义,而类恰好由用于创建它的函数定义

例如,如果我定义这个:

function Player (name, alias, turns) {
    this.name=name;
    this.alias=alias;
    this.turns=turns;
}
我创建了一个具有3个属性的对象播放器。 要创建此对象的实例,我将使用运算符new,如下所示:

var Bob = new Player ("bob", "killer", 123);
有人可能会认为你可以这样说:

var Jim = { 'name':'jim', 'alias':'greenhorn', 'turns':123 };
function Player (name, alias) {
    this.name=name;
    this.alias=alias;
    this.turns=123; // probably no need to pass this value as a parameter
}
Player.prototype.get_alias = function() { return this.alias; }

var players = [];
players.push (new Player ("bob", "killer"));
players.push (new Player ("jim", "greenhorn"));

console.log(players[1].get_alias()); // greenhorn
如果只访问属性,这实际上是等效的。然而,大多数对象也应该有方法

让我们为播放器添加一个方法“sayHi”:

Player.prototype.sayHi = function() { console.log ("Hi, my name is "+this.name); }
现在我们可以将其与Bob一起使用:

Bob.sayHi(); // Hi, my name is bob
如果你和吉姆一起尝试:

Jim.sayHi() // JS error : sayHi : no such property
这里发生的事情是,
Bob
实际上属于
Player
,因此在查找
sayHi
属性时,解释器将扫描
prototype
数组,因为您定义了
protopype.sayHi
(或者
prototype[“sayHi”]
,它将使用它

Jim
是一个基本对象,因此解释器自然无法找到与
sayHi
方法的关系

现在,如果使用括号表示法,如
var players=[]
创建一个
数组
对象的实例,该对象有许多预定义的方法(
push()

因此,要创建玩家列表/阵列,您可以使用以下内容:

var Jim = { 'name':'jim', 'alias':'greenhorn', 'turns':123 };
function Player (name, alias) {
    this.name=name;
    this.alias=alias;
    this.turns=123; // probably no need to pass this value as a parameter
}
Player.prototype.get_alias = function() { return this.alias; }

var players = [];
players.push (new Player ("bob", "killer"));
players.push (new Player ("jim", "greenhorn"));

console.log(players[1].get_alias()); // greenhorn

get\u alias
方法实际上不是很有用,因为JS中不能有私有成员(或者至少不能像C++中那样使用私有成员),所以你也可以直接使用
players[1]。alias
,但我试着坚持你原来的示例。

你的数组和对象示例看起来一样,两者都不是完全合法的语法。(对象1很接近,只需将
=
替换为
)将对象的构建与HTML呈现混合在一起可能会让你头疼。我建议将这些行移出函数:
document.getElementById(“playerdisp”).innerHTML=playerList[N]。name
忽略HTML行,代码将正确构建数组。也许有更好的技术,但这是一个开始。斯科特,我觉得这不是最好的主意。不知道是什么,但我的直觉告诉我不要。让一个函数调用另一个函数(一个用于构建,一个用于HTML)还是让一个函数同时调用两个函数更好?谢谢kuroi neko!你的思维和逻辑与我提到的那本书的思路一致:首先思考流程,然后添加代码使其发生。深入阅读并重新阅读你的答案,可能会创建一个小提琴,因为这似乎比制作本地副本更容易。问:在那里调用构造函数:players.push(新玩家(“bob”,“killer”);,我可以对一个函数而不是字符串进行调用,这样名称就可以由另一个函数随机生成吗?当然可以。你可以在“构造函数”(即
Player
函数)中做任何你想做的事。它基本上是一个JavaScript函数,与其他函数一样,除了