首页 > 解决方案 > 在数组的开头添加一个对象

问题描述

我知道这很容易,但我无法完全理解。

function submitNewComment() {
   var noo = 0; //array index
   var userName = document.getElementById('user-name').value; //textbox
   var commentBox = document.getElementById('main-comment').value; //textbox
   var now = new Date();
   mili = now.getTime(); //time in milisecond
   var element = [];
   element.push({
      "no": noo, //array index
      "username": userName,
      "date": mili,
      "body": commentBox,
      "likes": "0",
      "parent": null
   });
console.log(element);
noo++;
console.log(noo);
}

简而言之,我需要添加创建一个变量作为包含对象的数组。当我运行该函数时,它并没有像我希望的那样工作。我错过了一些东西。

第二次运行该函数时存在问题。理想情况下,应该创建第二个对象,但更新第一个对象。因此,在第 2 次运行结束时以及之后的所有其他运行时,数组的长度保持为 1。

标签: javascript

解决方案


你有几个问题。您需要有一种在页面加载后获取数据的方法。

  1. 您需要一个按钮或其他一些操作方法。
  2. 您对对象的创建感到困惑。如果它是用于创建对象的工厂函数,那么 'this.[label]' 是有效的,但如果您只是将表单数据作为对象推送到数组中,那么按照我在下面的建议进行操作。我所做的有意义吗?
  3. 我也没有在这里更改它,但是以毫秒为单位创建日期的最佳方法是 Date.now()。继续使用此方法,它将缩短和简化您的代码。
  4. 任何问题?

var element = []; 
var btn = document.getElementById('btn');
btn.addEventListener('click', submitNewComment);
      
function submitNewComment() {
 var userName = document.getElementById('user-name').value
 var commentBox = document.getElementById('main-comment').value
 var now = new Date();
 var milliseconds = now.getTime();
  element.unshift({
    no: "test",
    username: userName,
    date: milliseconds,
    body: commentBox,
    likes: 0,
    parent: null,
  });
console.log(element);
}
 <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>misterhtmlcss</title>
  </head>
  <body>
		<input type="text" name="user-name" id="user-name">
    <input type="text" name="main-comment" id="main-comment">
    <button id="btn">Submit</button>
    <script src="index.js"></script>
  </body>
</html>

更新。我意识到我将此声明留在了函数中,这意味着它不会保留根据您所说的内容您可能想要的连续提交。


推荐阅读