修改具有对象数组的对象的键

时间:2017-06-02 04:26:07

标签: javascript arrays object reference

有一个对象,其中每个键都是一个对象数组。

例如,在以下示例中,data是一个具有键的对象,其中每个键都是一个对象数组:

{
    "status": 200,
    "message": "Successful",
    "data": {
        "manual": [
        {
            "vendor_id": 1,
            "price": 4590,
            "discounts": {
            "micro": 0,
            "macro": 120
            },
            "vendor": "Vendor 1",
            "customer_rating": "3.0/5",
            "sla_compliance": 90,
            "system_flag": "Green"
        }
        ],
        "nearest": [
        {
            "vendor_id": 1,
            "price": 4590,
            "discounts": {
            "micro": 0,
            "macro": 120
            },
            "vendor": "Vendor 1",
            "customer_rating": "3.0/5",
            "sla_compliance": 90,
            "system_flag": "Green"
        }
        ],
        "auto": [
        {
            "vendor_id": 1,
            "price": 4590,
            "discounts": {
            "micro": 0,
            "macro": 120
            },
            "vendor": "Vendor 1",
            "customer_rating": "3.0/5",
            "sla_compliance": 90,
            "system_flag": "Green"
        }
        ],
        "ticket_id": 72
    }
    }

我需要从数组内的每个对象添加/删除键。例如,我需要为密钥name中的每个对象添加manual密钥。像nearestauto等其他对象数组一样。这样做的方法是什么?

我尝试修改一个键,它会更改整个对象。我怎么能在这里避免引用呢?

1 个答案:

答案 0 :(得分:0)

你的意思是这样吗?

假设您的数据结构名为cars

var cars = {
    "status": 200,
    "message": "Successful",
    "data": {
        "manual": [
        {
             ...

然后,您可以将属性name添加到属性manual下的项目,如

cars.data.manual = cars.data.manual.map(i => Object.assign({name: 'My ' + i.vendor}, i));

同样地,对于不同属性下的其他项目。

你可以

console.log(cars);

然后验证结果。