javascript - 无法两次推送到同一个数组

标签 javascript arrays

我有一个简单的对象

var errors = {};

我正在向其中动态推送新值,如下所示:

function getNameById(id){
    return usersArray.find(item => item.id === id).name;
}

var usersArray = [
	{"id":"135","name":"Jenny"},
                    {"id":"162","name":"Kelly"}
                 ];
$("#submit").click(function (e) {           
    var errors = {};
    $(".validation").each(function(){
       var worker_id = $(this).attr('id').replace(/[^\d]/g, '');
       var w_name = getNameById(worker_id);
       errors[w_name] = [];

       if ( $(this).val() == "" ) {
           errors[w_name].push( $(this).attr('id').replace(/[^a-zA-Z]/g, '') + " must be filled!");
           //errors[w_name].push("second number must be smaller than first");
       }
       if ( $(this).attr('id') == "second-"+worker_id  && ($(this).val() < $('#first-'+worker_id+'').val())) {
        	errors[w_name].push("second number must be smaller than first");
       }     
    });
    
    console.log(errors);
    e.preventDefault();
    e.stopPropagation();

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<form method="post">
  First<input id="first-135" class="validation" name="first" type="text" value="5"><br>
  Second<input id="second-135" class="validation" name="second" type="text" value="8"><br>
  Signature<input id="signature-135" class="validation" name="signature" type="text"><br>
<input id="submit" type="submit" value="Submit">
</form>

第一次在第一个 IF 条件下它会推送,一切都很好,但在第二个 IF 下它不会推送,我没有收到任何错误消息。在第一次评论后,我有相同的行,如果我将其注释掉,它就会像第一个一样被推送。

我在FIDDLE上创建了一个片段因此,请转到检查并打开控制台并尝试提交,您将看到错误数组中只有一个插入。

为什么第二个没有推送到数组?

最佳答案

问题出在这里:

if ( ... ($(this).val() < $('#first-'+worker_id+'').val()))

.val()计算结果为字符串,并且任何时候您使用像 < 这样的相对运算符或>对于字符串,它按字母顺序比较它们。这可能会导致一些意外的结果,返回 true当你期望false ,反之亦然。

因为您提到这些应该是日期,所以您需要使用 Date.parse() 将它们转换为日期对象。 - 当然,假设它们采用 JS 可以解析的正确日期格式:

var d1 = Date.parse($(this).val());
var d2 = Date.parse($('#first-'+worker_id+'').val());

if (d1 < d2) {
   //first date is earlier than second date
}

关于javascript - 无法两次推送到同一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42813079/

相关文章:

javascript - 如何与具有这样 id 的元素交互 : "inputText115:3551;a" using Selnium + webdriverIO + nodeJS

c - 随机字符数组排序

javascript - 在 iframe 内单击后获取警报,通过 jQuery 或 javascript

javascript - 为什么以下 JavaScript 代码无效?

c++ - 有没有办法在 C++ 中扩展动态内存数组?

arrays - 如何保留一维数组的单调递增值

java - 从字符串 [] 的所有元素中删除引号

java - 如何创建一个方法,接受一个数组并查找某个数字的所有出现,并返回该数字出现的所有索引的新数组

javascript - 无法读取 Angular 2 中未定义的属性 'path'

c# - 带有 firefox 3.6 的 ajax modalpopupextender 显示在页面底部