我有一个对象,它有服务数组,我检查是否有任何服务 ID 和提供 ID 与其减少的计数值匹配,一旦计数达到零,就需要删除该对象。 please check my try in fiddle 。我可以减少,但达到零时无法删除
const obj = {
name:'saloon',
services:[
{
sid:1,
offid:20,
count:2
},
{
sid:2,
offid:18,
count:1
},
{
sid:3,
offid:15,
count:3
}
]
}
给定值:基于此服务和优惠 ID 计数应减少,一旦计数达到零,需要删除该对象
const servid = 2
const offid = 18
我的代码
obj.services = obj.services.map(data => {
if(data.sid == servid && data.offid == offid ){
return data.count > 1 && {
sid:data.sid,
offide:data.offid,
count:data.count -1
}
}else{
return data
}
})
console.log(obj);
预期结果:
const result = {
name:'saloon',
services:[
{
sid:1,
offid:20,
count:2
},
{
sid:3,
offid:15,
count:3
}
]
}
最佳答案
使用array#forEach
迭代数组并检查服务内的每个sid
和offid
,如果匹配则更新count
值之后检查 count
值是否小于或等于零,如果是,则使用将其索引推送到 indexes
数组中。之后,您可以迭代 indexes
数组并使用 array#splice
删除 services
数组中的这些值。
const obj = { name:'saloon', services:[ { sid:1, offid:20, count:2 }, { sid:2, offid:18, count:1 }, { sid:3, offid:15, count:3 } ] };
const servid = 2;
const offid = 18;
var indexes = [];
obj.services.forEach(function(service, index) {
if(service.sid === servid && service.offid === offid){
--service.count;
}
if(service.count <= 0)
indexes.push(index);
});
indexes.reverse().forEach(function(index){
obj.services.splice(index, 1);
});
console.log(obj);
关于javascript - 减少对象内数组的计数值,一旦计数达到零,就会使用 java 脚本自动删除该对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47563275/