【问题标题】:Add object to array failure将对象添加到数组失败
【发布时间】:2015-10-27 18:12:38
【问题描述】:

我正在构建一个数组,该数组将承载具有学生姓名、成绩和 z 分数的对象(当前值设置为 null),但在加载对象时遇到问题。

该对象应如下所示:

var 000 = {
    name: "John Doe",
    grade: 92,
    zScore: null
};

Fiddle here.

HTML:

<div id="content">
    <input type="text" id="name" placeholder= "Name . . .">
    <input type="text" id="grade" placeholder = "Grade . . . ">
    <button id="add">Add</button>
    <button id="doMath">Do Math</button>
    <br>
    <br>
    <ul id="list"></ul>
</div>

CSS:

#name:hover,#grade:hover {
    border: 1px solid #000;
}

JavaScript:

var studentArray = [];
var oid = 001;
var studentName = $('#name').val();
var studentGrade = (parseInt($('#name').val()));
var zScore = null;
$(document).ready(function() {
    $('#add').on('click', function() {
        if (studentName === "" || studentGrade === "") {
            return;
        };
        oid = {
            name: studentName,
            grade: studentGrade,
            z: zScore
        };
        //check it out
        console.log(oid);
        //push object to array
        studentArray.push(oid);
        //check out array
        console.log(studentArray);
        //push OID up for next student and reset inputs
        $('#name').val("");
        $('#grade').val("");
        oid++;
    });
    $('#doMath').on('click', function() {});
});

我做错了什么?

【问题讨论】:

  • var 000?这行得通吗?
  • 这是一个示例。 var oid 实际上开始于 001
  • 呃,oid 以数字开头,然后你给它分配一个对象,然后你尝试增加那个对象......不会工作!
  • 您正在使用#name 而不是#grade 设置学生成绩的值。此外,您需要在 click 函数中获取这些值,否则它们将始终为空

标签: javascript jquery arrays object javascript-objects


【解决方案1】:

通过添加到数组中,您实际上忽略了对象名称。或许您可以使用父对象?

var studentObj = {};
var oid = 001;
var studentName = "evan";
var studentGrade = "a";
var zScore = null; 
//push to object
studentObj[oid] = {
    name: studentName,
    grade: studentGrade,
    z: zScore
};
//check out object
console.log(studentObj);
//push OID up for next student and reset inputs
$('#name').val("");
$('#grade').val("");
oid++;

https://jsfiddle.net/kogx7Lks/3/

【讨论】:

  • 代码中有studentArray[oid] = { name: studentName, grade: studentGrade, z: zScore,但是当我打开控制台时,成绩排在学生之前。这是为什么呢?
  • 最终目标是什么?您打算如何显示数据?
  • 按字母顺序显示不混乱吗?我计划访问 score 属性以最终计算 z score 属性。最终目标是显示 z 分数。我还没有决定如何显示数据,但现在可能是一个包含名称、等级和 z 分数的列表。
  • 我在底部添加了#doMath点击的快捷功能,看看jsfiddle.net/kogx7Lks/6
  • 我实际上还没有看到hasOwnProperty 方法所以我查了一下。我是否正确理解它正在做的是按名称访问属性?例如。 studentArray[property].grade 得到成绩,但你不能使用studentArray.grade 吗?
【解决方案2】:

查看此代码,它可以帮助您在每次点击时分配价值:

$('#add').on('click', function() {
    studentName = $('#name').val();
    studentGrade = (parseInt($('#name').val()));
    ...
 });

http://jsfiddle.net/kogx7Lks/4/

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 2015-05-16
    • 1970-01-01
    相关资源
    最近更新 更多