मेरे पास ऑब्जेक्ट्स की जावास्क्रिप्ट सरणी है जिसमें इसमें कुछ ऐसा है:

[{
  orderId: 1,
  orderLine: 1,
  itemId: 123,
  qty: 1
 },
 {
  orderId: 2,
  orderLine: 4,
  itemId: 123,
  qty: 2
 },
 {
  orderId: 3,
  orderLine: 7,
  itemId: 234,
  qty: 1
 },
 {
  orderId: 4,
  orderLine: 8,
  itemId: 123,
  qty: 1
 }
]

मेरे पास दूसरी सरणी भी है जिसमें आइटम आईडी से मेल खाने वाली वस्तुओं की संख्या है।

[{
   itemId: 123,
   qty: 3
 },
 {
   itemId: 234,
   qty: 4
 }
]

मैं उन आदेशों की एक सूची प्राप्त करना चाहता हूं जिन्हें वस्तुओं की मात्रा से पूरा नहीं किया जा सकता है।

वर्तमान में, मैं ऑर्डर सरणी पर प्रत्येक लूप के लिए सोच रहा हूं, आइटम सरणी को आइटम आईडी से मिलान करने के लिए फ़िल्टर करें और फिर मिलान किए गए आइटम की आइटम सरणी मात्रा को ऑर्डर की गई मात्रा से कम करें। यदि फ़िल्टर किए गए आइटम में मात्रा 0 है, तो उस आदेश को पूरा नहीं किया जा सकता है।

समस्या यह है कि हम जानते हैं कि प्रत्येक लूप अक्षम होने जा रहे हैं। क्या कोई अन्य तरीका है जिससे मैं आइटम की संपत्ति से मेल खाने वाली वस्तुओं को हटा सकता हूं Id उपलब्ध मात्रा से? अनिवार्य रूप से शीर्ष एक्स ऑर्डर को एक पास में ऑर्डर सरणी से स्किम करें?

अब जब मैं इसके बारे में सोचता हूं, तो इसे कुछ तर्क भी लेने होंगे जैसे, यदि ऑर्डर की गई मात्रा उपलब्ध मात्रा से अधिक है जबकि उपलब्ध मात्रा शून्य से अधिक है, तो उस ऑर्डर को छोड़ दें और अगले पर जाएं।

इसलिए, ऊपर दिए गए डेटा का उपयोग करते हुए, वर्तमान में एकमात्र ऑर्डर जो लौटाया जाएगा वह ऑर्डर आईडी 4 होगा, क्योंकि मेरे पास आइटम 123 में से 3 हैं और ऑर्डर 1 और 2 पूरे होंगे। मेरे पास आइटम २३४ में से ४ भी हैं और केवल १ का आदेश दिया गया है इसलिए इसे पूरा किया जाएगा। हालांकि, अगर मेरे पास आइटम 123 में से केवल 2 थे, तो ऑर्डर 1 और 4 को पूरा किया जाएगा क्योंकि 1 ऑर्डर 1 (ऊपर प्रसंस्करण) के लिए गया था और 2 को 2 के लिए ऑर्डर किया गया था, लेकिन केवल 1 शेष होने के कारण मैंने इसे छोड़ दिया और ऑर्डर 4 ऑर्डर कर रहा था 1 भी पूरा किया।

प्रत्येक के लिए इस स्किमिंग को बेहतर तरीके से करने के लिए कोई सुझाव?

1
SpaceCowboy74 3 सितंबर 2019, 22:18

1 उत्तर

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

map ऑर्डर सरणी और उपलब्ध आइटम सरणी से मात्रा घटाएं और जब भी उपलब्ध qty नीचे हो 0 orderId लौटाएं, ध्यान रखें कि available सरणी को उत्परिवर्तित किया जाएगा, यदि आप इसे संरक्षित करना चाहते हैं, तो एक प्रतिलिपि बनाएं, परिणाम ऑर्डर आईडी की एक सरणी होगी जिसे पूरा नहीं किया जा सकता है:

const orders = [
  {
    orderId: 1,
    orderLine: 1,
    itemId: 123,
    qty: 1
  },
  {
    orderId: 2,
    orderLine: 4,
    itemId: 123,
    qty: 2
  },
  {
    orderId: 3,
    orderLine: 7,
    itemId: 234,
    qty: 1
  },
  {
    orderId: 4,
    orderLine: 8,
    itemId: 123,
    qty: 1
  }
];

const available = [
  {
    itemId: 123,
    qty: 3
  },
  {
    itemId: 234,
    qty: 4
  }
];

// make a copy if you want to preserve the available object
// const availableCopy = JSON.parse(JSON.stringify(available));

const result = orders
  .map(({ orderId, qty, itemId }) => {
    const itm = available.find(e => e.itemId === itemId);
    itm.qty = itm.qty - qty;

    return itm.qty < 0 ? orderId : null;
  })
  .filter(e => e);

console.log(result);
1
Taki 3 सितंबर 2019, 19:36