如何使用javascript获取数组中特定id的最后一个值?
我有一个函数,用于在数组onkeyup事件中存储行的值。但是,在某些情况下,它将存储相同的行值,但数量和总数不同,但id相同。如何将其存储在数组中,使其仅保存特定id的最新值集?我知道这有点混乱,但请看下图。谢谢你的帮助 我想保存ff:如何使用javascript获取数组中特定id的最后一个值?,javascript,jquery,arrays,ajax,Javascript,Jquery,Arrays,Ajax,我有一个函数,用于在数组onkeyup事件中存储行的值。但是,在某些情况下,它将存储相同的行值,但数量和总数不同,但id相同。如何将其存储在数组中,使其仅保存特定id的最新值集?我知道这有点混乱,但请看下图。谢谢你的帮助 我想保存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:"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]);
}
});
});
var arrayVar=[];
var数据;
$(函数(){
$('tbl po list')。在('keyup change','input[type=“number”]',函数()上{
$(this).parents('.info').find('.total').val($(this.val()*$(this).parents('.info').find('.price').val());
数据={
id:$(this).parents('.info').find('.prod id').val(),
数量:$(this).val(),
价格:$(this).parents('.info').find('.price').val(),
总计:$(this).parents('.info').find('.total').val()
}
arrayVar.push(数据);
对于(变量i=0;i
如果发现数组值,则需要在for循环内部使用splice()
删除该数组值:
var id = $(this).parents('.info').find('.prod-id').val();
for(var i = 0; i < arrayVar.length; i++){
if(arrayVar[i]['id'] == id){
arrayVar.splice(i, 1);
}
}
var id=$(this).parents('.info').find('.prod id').val();
对于(变量i=0;i
从头到尾迭代,只将新对象(按id)推送到新数组中
unshift
使新数组保持相同的顺序
var index = [], out = [];
for (var i = arr.length - 1; i >= 0; i--) {
if (index.indexOf(arr[i].id) === -1) {
index.push(arr[i].id);
out.unshift(arr[i]);
}
}
如果您更换:
arrayVar.push(data);
作者:
for(变量i=0;i
如果循环没有找到相同的id,那么在循环之后,我将等于arrayVar.length,因此赋值将像推一样
另一方面,如果找到id,则循环退出,赋值将替换之前该数组元素中的任何内容
更简洁的版本如下:
for(var i = 0; i < arrayVar.length && arrayVar[i].id !== data.id; i++);
arrayVar[i] = data;
for(var i=0;i
似乎适合打一些代码高尔夫。以下是我的尝试:
o=data.reduce((a,v)=>a[v.id]=v&&a,{});Object.keys(o).map(k=>o[k]);
原始代码:
obj = data.reduce((accum, value, i) => {
accum[value.id] = value;
return accum;
})
out = Object.keys(obj).map(key => obj[key]);
其工作原理是使用将值累积到对象中—使用id作为键意味着具有相同id的行将被覆盖—然后从对象中提取值。您能创建一个小提琴吗?
obj = data.reduce((accum, value, i) => {
accum[value.id] = value;
return accum;
})
out = Object.keys(obj).map(key => obj[key]);