gpt4 book ai didi

javascript过滤器编辑并保存数组

转载 作者:行者123 更新时间:2023-12-03 03:48:41 25 4
gpt4 key购买 nike

我有以下示例数据。

var data = [{
"_id" : ObjectId("583f6e6d14c8042dd7c979e6"),
"transid" : 1,
"acct" : "acct1",
"transdate" : ISODate("2012-01-31T05:00:00.000Z"),
"category" : "category1",
"amount" : 103
}, {
"_id" : ObjectId("583f6e6d14c8042dd7c2132t6"),
"transid" : 2,
"acct" : "acct2",
"transdate" : ISODate("2012-01-31T05:00:00.000Z"),
"category" : "category2",
"amount" : 103
}, {
"_id" : ObjectId("583f6e6d14c8042dd7c2132t6"),
"transid" : 3,
"acct" : "acct2",
"transdate" : ISODate("2016-07-31T05:00:00.000Z"),
"category" : "category1",
"amount" : 103
}]

我想根据索引查找特定元素,然后编辑键,然后将其附加到现有变量。执行此操作的最佳方法是什么,我已经使用了 .map 和 .filter 选项,但是我不能只返回使用 .map 时匹配的已编辑元素。

我尝试过的一些事情:

 //save the changes on the passed in item
let transUpdate = trans.map(item => {
if (item.transid === indexTransId) {
return Object.assign({}, item, { notes: indexNote })
}
return item //if non matched item then just return the default
})

这种方法可行,但它返回一个包含所有内容的变量(transUpdate)trans 数组中的元素。我只想要indexTransId 的匹配transid,并且我想将其附加到transUpdate。如果我在非 transid 匹配上默认不返回任何内容,则会收到错误。如果我默认返回 null,那么我会得到一个空对象,但我想只包含匹配的 transid。

我确信有多种方法可以做到这一点,并且我可以使用循环和 if,但我对使用 ES6 语法完成此任务的一些更优雅的方法感兴趣。

最佳答案

要附加到transUpdate,您确实需要使用filter。假设您有给定的 indexTransIdindexNode,它看起来像这样:

transUpdate.push(...trans.filter(item => item.transid === indexTransId)
.map(item => Object.assign({}, item, { notes: indexNote })));

请注意,如果您执行Object.assign(item, {notes: indexNote }),您将改变原始item:这将是一个副作用,而不是符合函数式编程

仅添加新的 transid 值:

在评论中您添加了一个规范:transUpdate 不应两次获得相同的 transid,但在这种情况下更新该记录。

对于这个目的,数组不太合适。您可以使用 Map 来代替。您可以将其声明如下:

transUpdate = new Map;

然后你可以像这样更新它:

trans.filter(item => item.transid === indexTransId)
.map(item => transUpdate.set(indexTransId,
Object.assign({}, item, { notes: indexNote })));

要以数组格式从 transUpdate 获取值,请执行以下操作:

[...transUpdate.values()]

关于javascript过滤器编辑并保存数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45259349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com