我有groupedTags
,我需要向其中添加字段,并在整个字段中添加新标签。
let groupedTags = {
'other': {}
}
if (!groupedTags.other[field]) {
groupedTags.other[field] = [];
}
groupedTags.other[field].push(tag);
我了解有必要初始化一个新字段以推送新标签-是否有更漂亮的方法每次都检查一个字段是否存在?我的意思是避免显式检查。还是没有什么可怕的检查?在很多地方都可以重复
答案 0 :(得分:0)
也许您应该使用Proxies
进行调查,以获得所需的结果。
这是这样做的简短示例CodeSandbox -example
1)创建代理处理程序以自定义Object
行为
const handler = {
set: function(obj, key, value) {
if (!obj[key]) {
obj[key] = [];
}
obj[key].push(value);
return true;
}
};
2)将代理分配给您的对象
let groupedTags = {
other: new Proxy({}, handler)
};
现在,分配新值将达到Proxy
groupedTags.other.b = "bar";
// {"other":{"b":["bar"]}}
答案 1 :(得分:-1)
如果要在空(或非空)对象上创建元素数组,则可以尝试此操作。因此,您不必检查要推送元素的属性是否已经存在。
如果不这样做,它将连接一个空数组,为您提供一个元素为1的数组,否则该值将添加到该数组中。希望这会有所帮助。
const o = {};
const toAdd = [1,2,3,4];
toAdd.forEach((v) => {
o.other = (o.other || []).concat(v);
});
o.other2 = (o.other2 || []).concat(123);
console.log(o);
答案 2 :(得分:-1)
我认为,除了需要自己明确地进行设置之外,没有其他方法可以检查是否需要将值+初始化。
您可以像这样使用 .then((response) => {
this.posts = response.data;
this.configPagination(response.headers);
})
取出groupedTags.other[field]
的一次出现:
||
您还可以使用封装了check-and-init部分的辅助方法:
let field = "foo", tag = "bar";
let groupedTags = {
'other': {}
}
// Get the existing items, or assign a new list & use it:
var items = groupedTags.other[field] || (groupedTags.other[field] = []);
items.push(tag);
console.log(groupedTags);