如果array包含2个相同的对象,则将第二个(或第3个,第4个)对象的值突变

时间:2018-10-01 10:03:26

标签: javascript object

所以我有一个空数组,将对象推入其中。

{
      "id": 702361206839,
      "title": "Misanthropy Club Tee",
      "handle": "misanthropy-club-tee",
      "body_html": "<div></div>",
      "published_at": "2018-06-25T21:41:55+01:00",
      "created_at": "2018-06-25T21:41:55+01:00",
      "updated_at": "2018-09-17T14:24:50+01:00",
      "vendor": "J.Parré",
      "product_type": "",
      "tags": [
        "T-Shirts"
      ]
}

如果我将同一对象推入数组,我希望能够更改ID键,使其值为702361206839-2,如果我添加另一个,则为702361206839-3,依此类推。但是,我推入数组的第一个对象保持不变。

谢谢

1 个答案:

答案 0 :(得分:1)

只需维护id的映射,该映射在按下id时已通过键被推送到数组,并且值是已经推送的对象数。

var map = {};
var arr = [];

现在,让我们假设您要推送的对象是obj

var obj = {
      "id": 702361206839,
      "title": "Misanthropy Club Tee",
      "handle": "misanthropy-club-tee",
      "body_html": "<div></div>",
      "published_at": "2018-06-25T21:41:55+01:00",
      "created_at": "2018-06-25T21:41:55+01:00",
      "updated_at": "2018-09-17T14:24:50+01:00",
      "vendor": "J.Parré",
      "product_type": "",
      "tags": [
        "T-Shirts"
      ]
};

在每次推送检查中是否存在映射之前,如果存在,请将对象id更改为所需的格式。

var id = obj.id;
if(map[obj.id]) {
    obj.id = obj.id + '-' + map[obj.id];
} else {
    map[obj.id] = 1;
}

arr.push(obj);
map[id] += 1;