javascript - 减少对象内数组的计数值,一旦计数达到零,就会使用 java 脚本自动删除该对象

标签 javascript arrays ecmascript-6

我有一个对象,它有服务数组,我检查是否有任何服务 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迭代数组并检查服务内的每个sidoffid,如果匹配则更新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/

相关文章:

javascript - Javascript中的多个对象属性分配

javascript - 在 vuex 中处理嵌套/复杂对象

javascript - SVG/SVGPan : center graphic upon loading

javascript - Cheerio 无法正确解析 HTML

javascript - 如何使用 ES6 类定义制作 Eclipse neon 格式的 Javascript

Javascript:如何使用const来要求

c++ - 从数组更改为包含数组的结构

arrays - bash:找到文件中的所有正则表达式并放入数组

Javascript:push()到内部类似字典的对象?

jquery - 在 jQuery 集合上运行 reduce()