如何将特定项推送到数组状态中?

3

我想将大部分项推到数组中,但不包括某些项

我希望将所有状态都推送到数组中,除了一些项

这是我的状态:

state = {
    username: '..',
    date: '..',
    time: '..',
    description: '..',
    images: '..',
    buildingNumber: '..',
    status: '..',
    serviceDB: '..',
    snapshotKey: '..', // i don't need this when pushed
    count: -1, // i don't need this when pushed
  };

这是我的代码

 let order = [];
    order.push(this.state);
    console.log(order); it's log all state 

// I want to push it to DB
    database()
      .ref(`Providers/ProvidersOrders/${uid}`)
      .push(...order);
  };

const { snapshotKey, count, ...filteredData } = this.state; - Emile Bergeron
解构对象并忽略其中一个结果 - Emile Bergeron
哎呀,我认为它应该在使用之前声明。 - Oliver D
是的,这是一个语句而不是表达式,所以它需要独立成一行。 - Emile Bergeron
3
@EmileBergeron 非常感谢您,今天我学到了新的东西 :) - Oliver D
显示剩余5条评论
3个回答

1

如果您不想使用任何库,可以使用解构赋值剩余参数语法来完成:

const { snapshotKey, count, ...rest } = this.state;

...

order.push(rest);

否则,您也可以使用 Lodash 的 _.omit 函数:
order.push(_.omit(this.state, ['snapshotKey', 'count']));

或者,如果你想选择使用哪些属性,可以再次使用解构和简写属性名来创建对象:

const {
    username,
    date,
    time,
    description,
    images,
    buildingNumber,
    status,
    serviceDB,
} = this.state;

...

order.push({
    username,
    date,
    time,
    description,
    images,
    buildingNumber,
    status,
    serviceDB,
});

或者,使用 Lodash,使用 _.pick,它是_.omit的相反操作:

order.push(_.pick(this.state, [
    'username',
    'date',
    'time',
    'description',
    'buildingNumber',
    'status',
    'serviceDB',
]));

我并不是那个给你点踩的人,尽管你的回答与重复候选项中描述的三种方式完全相同。如果在SO上已经有好的问题和答案,我们就不应该再次回答。 - Emile Bergeron
@EmileBergeron 我认为不应该允许没有反馈的负评,因此每当我发现所有帖子都被系统性地投下无评论的负票时,我会重新创建答案。 - Danziger
这样做只会导致你的账户被封禁并惹恼管理员,我认为从长远来看这不是一个好主意。而且,在投票反对时强制发表评论已经被讨论过了 很多次 - Emile Bergeron
1
我最终还是选择了点赞,因为这是目前这里最完整的答案。 - Emile Bergeron

0
如果您想选择某些属性,则只需声明您想要的属性即可:
let {snapshotKey, count, ...y} = state;
arr.push(y);    

一个例子:

state = {
    username: '1',
    date: '2',
    time: '3',
    description: '4',
    images: '5',
    buildingNumber: '6',
    status: '7',
    serviceDB: '8',
    snapshotKey: '9', // i don't need this when pushed
    count: -10, // i don't need this when pushed
  };
let arr = [];
let {snapshotKey, count, ...y} = state;
arr.push(y);
console.log(arr);


2
您的初始回答语法无效。尽管这个问题应该被关闭,因为在SO上已经有很多类似的答案,但我已经取消了我的负投票。 - Emile Bergeron

0

你可以使用解构赋值 如文档所示

const {  count,snapshotKey, ...newData } = this.state;

现在,newData 包含:

 newData={
    username: '..',
    date: '..',
    time: '..',
    description: '..',
    images: '..',
    buildingNumber: '..',
    status: '..',
    serviceDB: '..',
  };

现在在newData中使用

 database()
      .ref(`Providers/ProvidersOrders/${uid}`)
      .push(...newData);

你可以在这里以及这里还有这里阅读更多相关信息,此外还有很棒的示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接