【问题标题】:Can an object name be a number?对象名称可以是数字吗?
【发布时间】:2015-11-02 17:42:20
【问题描述】:

我正在尝试创建一个对象并让每个对象的名称都是唯一的。这些对象将有一个名称、一个数字和一个为空的第二个数字(我打算稍后计算)。

是否可以有一个以1 变量命名的对象,然后在函数末尾增加变量以便下一个对象是2

我收到了 ID 号值的警报,它显示为 NaN

在我的小提琴中,我有一个按钮可以将数组中的每个对象附加到一个列表中,以便我可以检查它们。他们以[ object Object ] 出现。

如果我以后想在每个对象中使用number 字段来执行计算,这应该是对象的对象而不是对象数组吗?

我相信我想要坚持使用我的示例对象的格式(除非有理由以另一种方式做得更好),因为它遵循 w3schools 上的示例。

我做错了什么?

Fiddle here.

HTML:

<input type="text" placeholder="Name" id="name"> <input type="text" placeholder="Number" id="number">
    <br>
    <button id="makeObject">Make Object</button>
    <button id="show">Show Me The Objects</button>
        <ul id="list"></ul>

JavaScript:

/*Sample ideal object
 1 = {
    name: John Doe
    number: 52
    newNumber: null
 }
*/

var arrayOfObjects = [];
var id = 1;

$(document).ready(function(){

    $('#makeObject').on('click', function(){
        var number = (parseInt($('#Number').val()));
        var name = $('#Name').val();
        arrayOfObjects.push(id = {
            number: number, 
            name: name,
            newNumber: null
        });
        id++;
        alert("The id is now: " + id);
        $('#Number').val("");
        $('#Name').val("");
    });

    $('#show').on('click', function(){
        $('#list').html("");
        for (i = 0; i < arrayOfObjects.length; i++) {
          $('#list').append("<li>" + arrayOfObjects[i] + "</li>");  
        };
    });
});

【问题讨论】:

  • 无论你做什么,对象键都是字符串,即使这些字符串代表数字。另一方面,变量只是为了方便程序员而使用的任意名称。你有什么问题?
  • 为什么不使用对象数组?
  • JavaScript 对象名称不能以数字开头:stackoverflow.com/a/9337047/1028949
  • @Quantastical 这不是“对象名”而是“变量名”。
  • @tadman,你是对的。变量名不能以数字开头。

标签: javascript jquery arrays object javascript-objects


【解决方案1】:

您正在寻找的是一个对象键,而不是它的名称(它不能以 Quantastical 状态的数字开头)

不管怎样,你的任务有点奇怪。这种方式应该是你想要的方式:

arrayOfObjects[id] = {
                number: number, 
                name: name,
                newNumber: null
            };

查看http://jsfiddle.net/ej3z9ncd/3/ 以确认它正在工作

【讨论】:

  • 当我通过将对象附加到列表来检查对象时,当我只添加一个对象并且对象未定义时,会出现两个对象。有没有办法将名称命名为 OID1、OID2、OID3 等并将其推送到 arrayOfObjects?就像现在一样,我认为它使每个对象名称为arrayOfObject1arrayOfObject2,而实际上它应该创建唯一标识符并将其推送到一个名为arrayOfObjects的数组中。
  • 未定义的原因是您的 i 从 1 开始而不是 0。
  • 我真的不明白对象命名的事情。你想要完成什么?如果您需要唯一 ID,只需将其存储为对象的属性,然后使用 push 将另一个对象添加到您的数组中。
【解决方案2】:

对象名称是字符串。

我意识到唯一的名称对于对象本身并不重要,我只是选择了“学生”。相反,我将唯一的学生姓名作为对象内的一个字段。

Fiddle here.

<input type="text" id="name" placeholder="Name">
<input type="text" id="score" placeholder="Score">
<br>
<br>
<button id="push">Push to Array</button>
<button id="show">Show</button>
<button id="doMath">Do Math</button>
<ul id="list"></ul>
<p id="sum"></p>
<p id="mean"></p>

CSS:

input:hover {
    border: 1px solid black;
}

JavaScript:

var myArray = [];
var sumOfScores;
var mean;
$(document).ready(function () {
    $('#push').on('click', function () {
        var name = $('#name').val();
        var score = parseInt($('#score').val());
        myArray.push((student = {
            name: name,
            score: score,
            newScore: null
        }));
        console.log(student);
        $('#name').val("");
        $('#score').val("");
    });
    $('#show').on('click', function () {
        $('#list').html("");
        for (i = 0; i < myArray.length; i++) {
            $('#list').append("<li>" + myArray[i].name + " received a score of " + myArray[i].score + "</li>");
        };
    });
    $('#doMath').on('click', function(){
        sumOfScores = 0;
        for (i = 0; i < myArray.length; i++) {
            sumOfScores += myArray[i].score;
        };
        $('#sum').html("The sum is: " + sumOfScores);
        mean = (sumOfScores / myArray.length);
        $('#mean').html("The mean score is: " + mean);
    });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2011-08-14
    • 2015-08-10
    • 1970-01-01
    相关资源
    最近更新 更多