मैं एक डेटा जेसन से डबल लूपिंग के साथ दो डेटा अलग करना चाहता हूं। लेकिन लूपिंग का परिणाम समान है .. यह मेरा इनपुट, लूपिंग प्रक्रिया और आउटपुट है:

"detail": [
        {
            "qty": 2,
            "price": 1000,
            "item_id": "1"
        },
        {
            "qty": 5,
            "price": 100000,
            "item_id": "2"
        }
    ]

detail_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"
                   // }
                 //]
             }

history_id बनाने के लिए दूसरा लूपिंग:

             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 requestInput = [{
    "qty": 2,
    "price": 1000,
    "item_id": "1"
  },
  {
    "qty": 5,
    "price": 100000,
    "item_id": "2"
  }
];

const detail = requestInput;
const history = requestInput;

function nanoid(id) {
  return 'fDRS0NIaoNoS9kiauypjy';
}

for (var i = 0; i < detail.length; i++) {
  if (!detail[i].detail_id) {
    detail[i].detail_id = nanoid(21);
  }
}
console.log(detail);

for (var x = 0; x < history.length; x++) {
  if (!history[x].history_id) {
    history[x].history_id = nanoid(21);
  }
}
console.log(history);
0
isnaini barochatun 16 मार्च 2020, 08:43

1 उत्तर

सबसे बढ़िया उत्तर

आपको उस डेटा की DEEP प्रतियां बनानी होंगी, जिसमें आप जा रहे हैं। अभी विवरण और इतिहास दोनों एक ही वस्तु की ओर इशारा कर रहे हैं। [...डेटा] का उपयोग करने से एक उथली प्रतिलिपि बन जाएगी। यह पर्याप्त नहीं होगा क्योंकि हमारे पास नेस्टेड डेटा है। डीप कॉपी करने के लिए लोदाश एक लोकप्रिय टूल है: https://lodash.com/

let data = [
  {
    qty: 2,
    price: 1000,
    item_id: "1"
  },
  {
    qty: 5,
    price: 100000,
    item_id: "2"
  }
];

// These are both referencing the same object
const detail = data;
const history = data;

for (var i = 0; i < detail.length; i++) {
  if (!detail[i].detail_id) {
    detail[i].detail_id = 10;
  }
}
console.log(detail);
// The first loop is adding on detail_id
// [ { qty: 2, price: 1000, item_id: '1', detail_id: 10 },
//   { qty: 5, price: 100000, item_id: '2', detail_id: 10 } ]


for (var x = 0; x < history.length; x++) {
  if (!history[x].history_id) {
    history[x].history_id = 10;
  }
}
console.log(history);

// The second loop adds on history_id
// [ { qty: 2,
//     price: 1000,
//     item_id: '1',
//     detail_id: 10,
//     history_id: 10 },
//   { qty: 5,
//     price: 100000,
//     item_id: '2',
//     detail_id: 10,
//     history_id: 10 } ]
0
Stephanie 16 मार्च 2020, 07:06