微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用javascript获取数组中特定id的最后一个值?

我有一个函数存储数组onkeyup事件中的行的值.但是,有些情况下它会存储相同的行值,但数量和总数不同但ID相同.如何以一种只保存特定id的最新值集的方式将它存储在数组中?我知道这有点令人困惑,但请看下面的图片.感谢您的帮助.

enter image description here

我想保存ff:

{id:"1", qty:"4", price:"45", total:"180"}
{id:"2", qty:"3", price:"10", total:"30"}
{id:"3", qty:"50", price:"12", total:"600"}
{id:"4", qty:"60", price:"12", total:"720"}

我的代码

var arrayVar = [];
var data;

$(function(){

  $('#tbl-po-list').on( 'keyup change' , 'input[type="number"]' ,function(){

    $(this).parents('.info').find('.total').val($(this).val() * $(this).parents('.info').find('.price').val());

      data = {
        id: $(this).parents('.info').find('.prod-id').val(),
        qty: $(this).val(),
        price: $(this).parents('.info').find('.price').val(),
        total: $(this).parents('.info').find('.total').val()
      }

      arrayVar.push(data); 

      for(var i = 0; i < arrayVar.length; i++){
        console.log(arrayVar[i]);
      }

    });   

  });

解决方法:

如果你替换你可以实现:

arrayVar.push(data); 

通过:

for(var i = 0; i < arrayVar.length; i++){
    if (arrayVar[i].id === data.id) break; // found the same id!
}
arrayVar[i] = data;

如果循环找不到相同的id,那么在循环之后i将等于arrayVar.length,因此赋值将类似于push.

另一方面,如果找到了id,则循环退出,并且赋值将替换之前该数组元素中的任何内容.

一个更简洁的版本:

for(var i = 0; i < arrayVar.length && arrayVar[i].id !== data.id; i++);
arrayVar[i] = data;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐