更新JavaScript对象

时间:2017-02-28 10:40:46

标签: javascript jquery

我知道有一些类似的问题,但是没有一个问题无法解决我的问题:

我有一个对象:

var mapOptions = {
        legend: {
            data:[
                {name: 'Europe', backgroundColor: 'RGB(228,101,41)'},
                {name: 'APAC', backgroundColor: 'RGB(0,71,126)'},
                {name: 'MENEAT', backgroundColor: 'RGB(145,0,73)'}
            ],
        }
    }

此对象应由此对象更新:

var newOptions = {
          legend: {
            data: [
                {name: 'Europe', backgroundColor: 'green'},
            ]
          }
    }

更新功能应该做什么:

  1. 更新属性:从'RGB(228,101,41)''green'

  2. 删除不需要的项目:例如只应保留'Europe'项。

  3. 现在我使用jQuery extend/deep函数:

    $.extend(true, mapOptions, newOptions);
    

    部分有效。只更新属性。

    有人可以帮我实现第二点,如何删除/添加项目?

    或者我应该将其拆分为2个功能吗?

    感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

如果你想改变第一个valeus 您可以使用数据数组

中的相对索引位置(0)
 mapOptions.legend.data[0] =   {name: 'Europe', backgroundColor: 'green'};

如果您想要更改所有数据的条件,那么您可以使用javascript点表示法来访问对象元素

mapOptions.legend.data =   {name: 'Europe', backgroundColor: 'green'};

答案 1 :(得分:1)

根据您的示例,解决方案可以是基本任务:

mapOptions.legend.data = newOptions.legend.data

答案 2 :(得分:0)

试试这个

mapOptions.legend.data =   {name: 'Europe', backgroundColor: 'green'};

答案 3 :(得分:0)

要更新多个项目,您可以使用带有对象引用的哈希表,然后迭代更新数组。

如果为给定名称设置了hash,请更新,否则将新对象推送到数组。

var mapOptions = { legend: { data: [{ name: 'Europe', backgroundColor: 'RGB(228,101,41)' }, { name: 'APAC', backgroundColor: 'RGB(0,71,126)' }, { name: 'MENEAT', backgroundColor: 'RGB(145,0,73)' }], } },
    newOptions = { legend: { data: [{ name: 'Europe', backgroundColor: 'green' }, ] } },
    hash = Object.create(null);

mapOptions.legend.data.forEach(function (a, i) {
    hash[a.name] = a;
});

newOptions.legend.data.forEach(function (a) {
    if (hash[a.name]) {
        hash[a.name].backgroundColor = a.backgroundColor;
    } else {
        mapOptions.legend.data.push(a);
    }
});

console.log(mapOptions.legend.data);
.as-console-wrapper { max-height: 100% !important; top: 0; }