基于键:值添加新对象

问题描述 投票:0回答:1

我有一个对象,我想基于did值在每个对象之前添加一个新对象。下面是我尝试的内容,但不是我想要的内容,它为每个项目添加了内容,还变成了数组。

let obj = {
  "district": [{
      "id": 1,
      "uid": 1,
      "type": 3,
      "pid": 0,
      "cid": 0,
      "did": 1,
      "name": "text 1"
    },
    {
      "id": 2,
      "uid": 2,
      "type": 3,
      "pid": 0,
      "cid": 0,
      "did": 2,
      "name": "text 2"
    },
    {
      "id": 3,
      "uid": 3,
      "type": 3,
      "pid": 0,
      "cid": 0,
      "did": 2,
      "name": "text 3"
    },
    {
      "id": 4,
      "uid": 4,
      "type": 3,
      "pid": 0,
      "cid": 0,
      "did": 3,
      "name": "text 4"
    },
    {
      "id": 5,
      "uid": 5,
      "type": 3,
      "pid": 0,
      "cid": 0,
      "did": 3,
      "name": "text 5"
    },
    {
      "id": 6,
      "uid": 6,
      "type": 3,
      "pid": 0,
      "cid": 0,
      "did": 0, // should not add object before this becaus did is 0
      "name": "text 6"
    }
  ]
}


var result = obj.district.map(function(el) {
if(el.did > 0){
  var o = Object.assign({}, obj.district);
  o.divider = {
    "dv": true,
    "name": 'divider ' + el.did
  };
  return o;
}
})

console.log(result)

如果did值不为null或0,则添加一个新对象,有点>0。结果应如下所示:

let obj = {
  "district": [{
      "dv": true,
      "name": "divider 1"
    }, {
      "id": 1,
      "uid": 1,
      "type": 3,
      "pid": 0,
      "cid": 0,
      "did": 1,
      "name": "text 1"
    },
    {
      "dv": true,
      "name": "divider 2"
    },
    {
      "id": 2,
      "uid": 2,
      "type": 3,
      "pid": 0,
      "cid": 0,
      "did": 2,
      "name": "text 2"
    },
    {
      "id": 3,
      "uid": 3,
      "type": 3,
      "pid": 0,
      "cid": 0,
      "did": 2,
      "name": "text 3"
    },
    {
      "dv": true,
      "name": "divider 3"
    },
    {
      "id": 4,
      "uid": 4,
      "type": 3,
      "pid": 0,
      "cid": 0,
      "did": 3,
      "name": "text 4"
    },
    {
      "id": 5,
      "uid": 5,
      "type": 3,
      "pid": 0,
      "cid": 0,
      "did": 3,
      "name": "text 5"
    },
    {
      "id": 6,
      "uid": 6,
      "type": 3,
      "pid": 0,
      "cid": 0,
      "did": 0, // should not add object before this becaus did is 0
      "name": "text 6"
    }
  ]
}

console.log(obj)

[应该在具有通用did id的对象之前添加,例如,如果有5个具有did 2的对象,则应该只添加一次新对象,而不是为每个项目添加一次。另外,新值的名称应基于did id,分频器1,分频器2或..

javascript
1个回答
0
投票

尝试一下:

var lastDivider;
var result = {
  district: []
}

obj.district.forEach(function(el) {
  if (el.did > 0 && lastDivider !== el.did) {
    result.district.push({
      "dv": true,
      "name": 'divider ' + el.did
    });
    lastDivider = el.did;
  }
  result.district.push([Object.assign({}, el)]);
});
© www.soinside.com 2019 - 2024. All rights reserved.