我有一个对象数组arrobj
,参数paramid
如果id
在列表中相同,则使其值为null
,
存储前一个值preValue
然后只为那些preValue > val更新其他对象val
。
(值被更新,如val、val+1、val+2、val+3...)
返回arrobj,如何用javascript实现
example1
let paramid = 28
const arrObj = [
{ id: 10, val: null },
{ id: 13, val: 1 },
{ id: 14, val: 2 },
{ id: 25, val: 5 },
{ id: 23, val: 8 },
{ id: 43, val: 7 },
{ id: 28, val: 6 },
{ id: 26, val: 10 }
];
In this example, since id and paramid same,
val will be null, { id: 28, val: null } preValue = 6
In the list check preValue > val, there are three Objects,
{ id: 23, val: 8 }, // updated to 7 (preVal+1)
{ id: 43, val: 7 }, // updated to 6 (preVal)
{ id: 26, val: 10 } // updated to 8 (preVal+2)
Expected Output
[
{ id: 10, val: null },
{ id: 13, val: 1 },
{ id: 14, val: 2 },
{ id: 25, val: 5 },
{ id: 23, val: 7 },
{ id: 43, val: 6 },
{ id: 28, val: null },
{ id: 26, val: 8 }
];
example 2
let paramid = 28
const arrobj = [
{ id: 10, val: null },
{ id: 13, val: 1 },
{ id: 14, val: 2 },
{ id: 25, val: 10 },
{ id: 23, val: 6 },
{ id: 43, val: 7 },
{ id: 28, val: 4 }
];
Expected Output
[
{ id: 10, val: null },
{ id: 13, val: 1 },
{ id: 14, val: 2 },
{ id: 25, val: 6 },
{ id: 23, val: 4 },
{ id: 43, val: 5 },
{ id: 28, val: null }
];
example 3
paramid = 14
arrobj = [
{ id: 10, val: null },
{ id: 13, val: 1 },
{ id: 14, val: 3 }
{ id: 16, val: 2 }
]
Expected Output
[
{ id: 10, val: null },
{ id: 13, val: 1 },
{ id: 14, val: null }
{ id: 16, val: 2 }
]
Tried
const getSameId = arrobj(e=>e.id === paramid);
let oldValue = getSameId.val;
for (let item of arrobj) {
const index = arrobj.index(item)
if(item.id === paramid) {
...item,
val: null
}
if(item.id !== paramid && oldValue > item.val) {
...item,
val: oldValue + 1
}
}
1条答案
按热度按时间ne5o7dgx1#
总而言之,代码在arrObj数组中搜索具有特定id值(paramid)的对象。如果找到,它将相应的瓦尔属性设置为null,并递归地查找数组中下一个更高的值。它更新下一个更高值的瓦尔属性,并重复该过程,直到没有找到更高的值。