我知道有一些类似的问题,但是没有一个问题无法解决我的问题:
我有一个对象:
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'},
]
}
}
更新功能应该做什么:
更新属性:从'RGB(228,101,41)'
到'green'
删除不需要的项目:例如只应保留'Europe'
项。
现在我使用jQuery extend/deep
函数:
$.extend(true, mapOptions, newOptions);
部分有效。只更新属性。
有人可以帮我实现第二点,如何删除/添加项目?
或者我应该将其拆分为2个功能吗?
感谢您的帮助!
答案 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; }