मेरे पास ये डेटा संरचना है

products:[
      {
        products_number: 14,
        products_ID: 'lvs_jeans-man',
        products_seller: 'a',
        products_SKU: [
          {
            productSKU_ID: 'nfl_lvs_jeans-man_xl_bl-stripe',
            productSKU_size: 'XL',
            productSKU_color: 'Blue_White'
          },
          {
            productSKU_ID: 'nfl_lvs_jeans-man_xl_bk',
            productSKU_size: 'XL',
            productSKU_color: 'Black'
          }
        ]
      },
      {
      products_number: 15,
      products_ID: 'lvs_jeans-man',
      products_seller: 'b',
      products_SKU: [
        {
          productSKU_ID: 'nfl_lvs_jeans-man_xl_bk',
          productSKU_size: 'XL',
          productSKU_color: 'Black'
        }
      ]
    },
    {
      products_number: 16,
      products_ID: 'lvs_jeans-man',
      products_seller: 'c',
      products_SKU: [
        {
          productSKU_ID: 'nfl_lvs_jeans-man_xl_gy',
          productSKU_size: 'XL',
          productSKU_color: 'Grey',

        }
      ]
    }
  ]

अटल

  var id = 'lvs_jeans-man'
  var size = 'XL'
  var color = 'Black'

मैं इन शर्तों को पूरा करने वाले आइटम को कैसे फ़िल्टर करूं

products_ID == id
productSKU_color == color
productSKU_size == size

आवश्यक आउटपुट है

  [{
    products_number: 14,
    products_ID: 'lvs_jeans-man',
    products_seller: 'a',
    productSKU_ID: 'nfl_lvs_jeans-man_xl_bk',
  },
  {
    products_number: 15,
    products_ID: 'lvs_jeans-man',
    products_seller: 'b',
    productSKU_ID: 'nfl_lvs_jeans-man_xl_bk',
  }]

मैंने जो कोशिश की है वह पहले उत्पादों_आईडी को फ़िल्टर करती है, फिर रंग और आकार को फ़िल्टर करती है ताकि मैं उत्पाद एसकेयू_आईडी को अंदर प्राप्त कर सकूं और फिर सरणी पुश के साथ खेल सकूं, लेकिन यह वापस आ जाए Cannot read property 'filter' of undefined"

var temp1 =  this.products.filter((product => product.products_ID === this.id).products_SKU.filter(sku => (sku.productSKU_color === this.color && sku.productSKU_size === this.size)))

आवश्यक आउटपुट कैसे प्राप्त करें?

0
nfl-x 31 मार्च 2018, 05:06

3 जवाब

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

फ़ंक्शन फ़िल्टर उपयुक्त नहीं है क्योंकि आपको सरणी .products_SKU से डेटा के साथ एक कस्टम आउटपुट बनाने की आवश्यकता है।

reduce और find फ़ंक्शन का उपयोग करके इस विकल्प का उपयोग करें।

var data = {  products: [{      products_number: 14,      products_ID: 'lvs_jeans-man',      products_seller: 'a',      products_SKU: [{          productSKU_ID: 'nfl_lvs_jeans-man_xl_bl-stripe',          productSKU_size: 'XL',          productSKU_color: 'Blue_White'        },        {          productSKU_ID: 'nfl_lvs_jeans-man_xl_bk',          productSKU_size: 'XL',          productSKU_color: 'Black'        }      ]    },    {      products_number: 15,      products_ID: 'lvs_jeans-man',      products_seller: 'b',      products_SKU: [{        productSKU_ID: 'nfl_lvs_jeans-man_xl_bk',        productSKU_size: 'XL',        productSKU_color: 'Black'      }]    },    {      products_number: 16,      products_ID: 'lvs_jeans-man',      products_seller: 'c',      products_SKU: [{        productSKU_ID: 'nfl_lvs_jeans-man_xl_gy',        productSKU_size: 'XL',        productSKU_color: 'Grey',      }]    }  ]};

var id = 'lvs_jeans-man'
var size = 'XL'
var color = 'Black'

var result = data.products.reduce((a, p) => {
  var found;
  if (p.products_ID == id && (found = p.products_SKU.find(s => s.productSKU_size === size && s.productSKU_color === color))) {

    a.push({
      products_number: p.products_number,
      products_ID: p.products_ID,
      products_seller: p.products_seller,
      productSKU_ID: found.productSKU_ID
    });
  }

  return a;
}, []);

console.log(result)
.as-console-wrapper { max-height: 100% !important; top: 0; }
1
Ele 31 मार्च 2018, 11:10
const finalProducts = this.products.reduce((final, product) =>  {
  if (product.id === this.id || !this.id) {
    return[...final, ...product.products_SKU.reduce((acc, p) => {
      if (p.productSKU_size === this.size && p.productSKU_color === this.color) {
        return [...acc, {
          products_number: product.products_number,
          products_ID: product.products_ID,
          products_seller: product.products_seller,
          productSKU_ID: p.productSKU_ID
        }];
      }
      return acc;
    }, [])];
  }
  return final;
}, []);

FinalProducs आपका अपेक्षित आउटपुट होगा।

0
Rushikesh Bharad 31 मार्च 2018, 05:14

यह अकेले filter के लिए बहुत जटिल है, आपको अधिक सरणी विधियों का उपयोग करना होगा, जिनमें reduce और find शामिल हैं:

const input = {
  products: [{
      products_number: 14,
      products_ID: 'lvs_jeans-man',
      products_seller: 'a',
      products_SKU: [{
          productSKU_ID: 'nfl_lvs_jeans-man_xl_bl-stripe',
          productSKU_size: 'XL',
          productSKU_color: 'Blue_White'
        },
        {
          productSKU_ID: 'nfl_lvs_jeans-man_xl_bk',
          productSKU_size: 'XL',
          productSKU_color: 'Black'
        }
      ]
    },
    {
      products_number: 15,
      products_ID: 'lvs_jeans-man',
      products_seller: 'b',
      products_SKU: [{
        productSKU_ID: 'nfl_lvs_jeans-man_xl_bk',
        productSKU_size: 'XL',
        productSKU_color: 'Black'
      }]
    },
    {
      products_number: 16,
      products_ID: 'lvs_jeans-man',
      products_seller: 'c',
      products_SKU: [{
        productSKU_ID: 'nfl_lvs_jeans-man_xl_gy',
        productSKU_size: 'XL',
        productSKU_color: 'Grey',

      }]
    }
  ]
};

const matchingProducts = input.products.filter(({ products_ID }) => products_ID === 'lvs_jeans-man');
const output = matchingProducts.reduce((matches, product) => {
  const foundSizeObj = product.products_SKU.find(({ productSKU_color, productSKU_size }) => {
    return productSKU_size === 'XL' && productSKU_color === 'Black';
  });
  if (!foundSizeObj) return matches;
  const match = {...product};
  delete match.products_SKU;
  match.productSKU_ID = foundSizeObj.productSKU_ID;
  matches.push(match);
  return matches;
}, []);
console.log(output);
0
CertainPerformance 31 मार्च 2018, 02:25