Angular 1 / Javascript - 替代lodash省略和删除运算符

时间:2017-08-22 11:23:55

标签: javascript angularjs lodash

我有一个子组件,我必须从对象中删除属性。

通常使用Lodash它应该使用此代码:

this.current.obj = omit(this.current.obj, ['sellerSupportWeb', 'sellerSupportAgency', 'sellerSupportAgent'])

只是current.obj模型没有挂载到父组件

但是,如果我只使用运算符delete从对象中删除属性,那么它可以正常工作

   delete this.current.obj.sellerSupportAgency
   delete this.current.obj.sellerSupportWeb
   delete this.current.obj.sellerSupportAgent

是否没有其他替代方法可以执行与删除相同的工作并省略?

我不知道它是否可以提供帮助,但是为了使用omit我正在调用子组件上的父对象(父组件)以便我接受它,但我正在寻找另一个解决方案current.obj

for (const [index] of this.current.parent.items.entries()) {
  this.current.parent.items[index] = omit(this.current.parent.items[index], ['sellerSupportWeb', 'sellerSupportAgency', 'sellerSupportAgent'])
}

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望修改组件与其父组件之间共享的对象。该对象位于父组件的数组中,因此我假设您使用的是ng-repeat语句。我不确定,因为你没有分享你的组件定义,也没有分享父组件模板中的实例化。

更改本地对象引用(使用omit)时,不会修改父组件中的数组。当您更改本地对象(使用delete)时,局部变量仍将引用父数组中的对象,并且它将在两个位置都被修改(因为它是同一个对象)。

简而言之,您必须在修改数组(在父级中)或从本地对象中删除字段之间进行选择(而delete是唯一的方法)。前者更像角度,特别是如果您使用' -type类型的事件处理程序来告诉父组件您希望从对象中删除某些字段。然后你可以做这样的事情:

angular.component(...
    bindings: {
        filterObjectHandler: '&onFilterObject'
(...)

this.filterObjectHandler(['sellerSupportWeb', 'sellerSupportAgency', 'sellerSupportAgent']);

或类似的东西。关于AngularJS 1.5+中的组件结构,有一组有趣的文章here

但是,如果你只想要一种方法来删除涉及带有字段数组的单行的字段,你可以使用它:

var obj = this.current.obj;

['sellerSupportWeb', 'sellerSupportAgency', 'sellerSupportAgent'].forEach(function(field) {
    delete obj[field];
});

甚至:

['sellerSupportWeb', 'sellerSupportAgency', 'sellerSupportAgent'].reduce(function(obj, field) {
    delete obj[field];
    return obj;
}, this.current.obj);