gpt4 book ai didi

javascript - lodash:在 allocate() 中运行函数

转载 作者:行者123 更新时间:2023-12-01 02:21:15 25 4
gpt4 key购买 nike

我对这个问题有点困惑。

本质上,如果 reqBody.address 存在,我想更新 db.address ,如果不存在,则使用现有值。我目前必须遍历我的 db json 两次;首先将变量设置为原始地址,然后在分配/合并时再次确定是否使用新创建的变量或reqBody.address。

我只想遍历一次。

除了明显的检查以仅在存在 reqBody.address 时执行此操作之外,我想知道是否可以通过从分配内的函数返回值来在单个语句中完成此操作。

下面是到目前为止我的代码,我想消除整个第一个 db_address 链命令,并让第二个链命令使用类似的内容:

.merge({ address: req_address || address }  })

其中||后面的地址是原始值。

const _ = require('lodash')
const moment = require('moment');

let reqBody = {"address_list":[{"address_type":"Home","address":"99 West Street"}]}
let db = {"users":[{"id":1,"name":"Joe","address_list":[{"address_type":"Home","address":"11 High Street","created_date":"2018-01-08","updated_date":""}]}]}

let req_address = reqBody.address_list[0].address;
let db_address = _.chain(db)
.get('users').find({id: 1})
.get('address_list')
.filter((address) => {return address.address_type === reqBody.address_list[0].address_type})
.get('[0].address')
.value()

db_address = _.chain(db)
.get('users').find({id: 1})
.get('address_list')
.filter((address) => {return address.address_type === reqBody.address_list[0].address_type})
.get('[0]')
.merge({ address: req_address || db_address },
{ updated_date: moment().format() }
)
.value()

console.log(db_address)

提前致谢

干杯

PS:再次感谢 Markus 强调合并

最佳答案

如果您只想更新数据库中的值,请使用 .merge({ adress: req_address }) 您不需要第一个链,如果该值未定义,则合并不会覆盖:

Source properties that resolve to undefined are skipped if a destination value exists.

但这仍然会更新时间戳,不确定这是否是一个问题。

或者,使用update,这是您要求的分配内有趣的函数,并且也允许不更新时间戳。

带有合并的版本

const _ = require('lodash')
const moment = require('moment');

let reqBody = {"address_list":[{"address_type":"Home","address":"99 West Street"}]}
let db = {"users":[{"id":1,"name":"Joe","address_list":[{"address_type":"Home","address":"11 High Street","created_date":"2018-01-08","updated_date":""}]}]}

let req_address = reqBody.address_list[0].address;

db_address = _.chain(db)
.get('users').find({id: 1})
.get('address_list')
.filter((address) => {return address.address_type === reqBody.address_list[0].address_type})
.get('0')
.merge({ address: req_address },
{ updated_date: moment().format() }
)
.value()

console.log(db_address)

有更新的版本

const _ = require('lodash')
const moment = require('moment');

let reqBody = {"address_list":[{"address_type":"Home","address":"99 West Street"}]}
let db = {"users":[{"id":1,"name":"Joe","address_list":[{"address_type":"Home","address":"11 High Street","created_date":"2018-01-08","updated_date":""}]}]}

let req_address = reqBody.address_list[0].address;

db_address = _.chain(db)
.get('users').find({id: 1})
.get('address_list')
.filter((address) => {return address.address_type === reqBody.address_list[0].address_type})
.update(
'0',
address =>
req_address ?
{
...address,
address: req_address,
updated_date: moment().format()
} :
address
)
.value()

console.log(db_address)

关于javascript - lodash:在 allocate() 中运行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49203941/

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