Javascript 在Adonisjs中循环数据时出现重复结果
我想从一个数据json返回两个不同的双循环数据。但循环的结果是一样的。。这是我的输入、循环过程和输出:Javascript 在Adonisjs中循环数据时出现重复结果,javascript,json,for-loop,adonis.js,Javascript,Json,For Loop,Adonis.js,我想从一个数据json返回两个不同的双循环数据。但循环的结果是一样的。。这是我的输入、循环过程和输出: "detail": [ { "qty": 2, "price": 1000, "item_id": "1" }, { "qty": 5, "price": 100000, "item_id": "2"
"detail": [
{
"qty": 2,
"price": 1000,
"item_id": "1"
},
{
"qty": 5,
"price": 100000,
"item_id": "2"
}
]
这是创建详细信息id的第一个流程循环:
const detail = request.input("detail");
const history = request.input("detail");
for (var i = 0; i < detail.length; i++) {
if(!detail[i].detail_id) {
detail[i].detail_id = nanoid(21);
}
console.log(detail[i]);
//output:
// [
// {
// "qty": 2,
// "price": 1000,
// "item_id": "1",
// "detail_id": "fDRS0NIaoNoS9kiauypjy"
// },
// {
// "qty": 5,
// "price": 100000,
// "item_id": "2",
// "detail_id": "fDRS0NIaoNoS9kiauypjy"
// }
//]
}
for (var x = 0; x < history.length; x++) {
if(!history[x].history_id) {
history[x].history_id = nanoid(21);
}
console.log(history[x]);
//output:
// [
// {
// "qty": 2,
// "price": 1000,
// "item_id": "1",
// "detail_id": "fDRS0NIaoNoS9kiauypjy"
// },
// {
// "qty": 5,
// "price": 100000,
// "item_id": "2",
// "detail_id": "fDRS0NIaoNoS9kiauypjy"
// }
//]
}
const detail=request.input(“细节”);
const history=request.input(“细节”);
对于(变量i=0;i
创建历史\u id的第二个循环:
const detail = request.input("detail");
const history = request.input("detail");
for (var i = 0; i < detail.length; i++) {
if(!detail[i].detail_id) {
detail[i].detail_id = nanoid(21);
}
console.log(detail[i]);
//output:
// [
// {
// "qty": 2,
// "price": 1000,
// "item_id": "1",
// "detail_id": "fDRS0NIaoNoS9kiauypjy"
// },
// {
// "qty": 5,
// "price": 100000,
// "item_id": "2",
// "detail_id": "fDRS0NIaoNoS9kiauypjy"
// }
//]
}
for (var x = 0; x < history.length; x++) {
if(!history[x].history_id) {
history[x].history_id = nanoid(21);
}
console.log(history[x]);
//output:
// [
// {
// "qty": 2,
// "price": 1000,
// "item_id": "1",
// "detail_id": "fDRS0NIaoNoS9kiauypjy"
// },
// {
// "qty": 5,
// "price": 100000,
// "item_id": "2",
// "detail_id": "fDRS0NIaoNoS9kiauypjy"
// }
//]
}
for(var x=0;x
第二次循环的结果与第一次循环的结果相同,这段代码有什么问题
const requestInput=[{
“数量”:2,
“价格”:1000美元,
“项目id”:“1”
},
{
“数量”:5,
“价格”:100000美元,
“项目id”:“2”
}
];
const detail=requestInput;
const history=请求输入;
函数nanoid(id){
返回'fDRS0NIaoNoS9kiauypjy';
}
对于(变量i=0;i console.log(历史记录)代码>您需要对传入的数据进行深度复制。现在,细节和历史都指向同一个对象。使用[…数据]将创建浅拷贝。这是不够的,因为我们有嵌套数据。Lodash是一种流行的深度复制工具:
let数据=[
{
数量:2,
价格:1000,
项目编号:“1”
},
{
数量:5,
价格:100000,
项目编号:“2”
}
];
//它们都引用同一个对象
const detail=数据;
常数历史=数据;
对于(变量i=0;i
你能试试constdetail={…request.input(“detail”)};const history={…request.input(“detail”)}
?@LevBuchel我认为request.input(“detail”)
给出了一个arrayhmm,但是如何从第二个循环中删除detail\u id呢?详细信息\u id仍然包含在历史记录中
我更新了上面的答案,但为了更好地解释它,您需要创建一个深度副本,如果对象是。现在,细节和历史都在引用同一件事。尝试使用:)