तो मुझे एक दुविधा है। मेरे पास अगला कोड है

  const loc = [
    { location_key: [32, 22, 11], autoassign: 1 },
    { location_key: [41, 42], autoassign: 1 }
  ];
  const bulkConfigs = [
    {
      dataValues: {
        config_key: 100,
      }
    },
    {
      dataValues: {
        config_key: 200,
      }
    }
  ];

मुझे इस तरह दिखने वाली वस्तु बनाने की ज़रूरत है:

  config_key: here get the config key from from bulkConfigs,
  location_key: here get the location_key,
  autoassign: 1

इसके अलावा मुझे इस वस्तु की आवश्यकता है

                config_key: config_key,
                location_key: '',
                autoassign: 1,

जितनी बार वे प्रत्येक config_key के लिए स्थान हैं, मेरा मतलब config_key से इस उदाहरण में है: 200 हमारे पास इस तरह की 2 वस्तुएं होंगी और config_key: 100 के लिए हमारे पास इस तरह की 3 वस्तुएं होंगी। मुझे लगता है कि इसे कम करने के साथ किया जा सकता है ... थोक कॉन्फिग और लोक में केवल 2 ऑब्जेक्ट्स हो सकते हैं, लेकिन संख्या हमेशा वही रहेगी, जैसे कि वे 3 थोक कॉन्फिग हैं, वहां भी 3 लोक होंगे, लेकिन स्थान_की अलग हो सकता है , एक में 7 स्थान_की, अन्य 4, और अंतिम वाला केवल 1 हो सकता है।

तो दूसरे शब्दों में, arrys हमेशा एक ही लंबाई के होते हैं और वे हमेशा एक ही क्रम में होते हैं इसलिए उनका एक ही index होता है। केवल location_key बदल सकता है, और मुझे बनाई गई वस्तु की आवश्यकता है जितनी बार location_key मौजूद है।

मैंने कुछ चीजों की कोशिश की है, लेकिन मुझे नहीं पता कि इस सामान की बात कब आती है .... मैं बस नहीं कर सकता, ऐसा तब होता है जब आप प्रतिक्रिया से शुरू करते हैं न कि जावा स्क्रिप्ट :)

-1
Tornado 16 अप्रैल 2020, 15:15

1 उत्तर

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

ठीक है तो मैं लॉश का उपयोग करके ऐसा करने में कामयाब रहा, मेरा समाधान यहां है, मुझे पता है कि यह नरक की तरह घोंसला है और शायद इसे आसान तरीके से किया जा सकता है, लेकिन नौसिखिया के लिए काफी अच्छा है। अधिक सुरुचिपूर्ण समाधान के साथ आने के लिए स्वतंत्र महसूस करें।

अगर आपके साथ भी ऐसी ही कोई समस्या है, तो यहां समाधान है। एक कोड सैंडबॉक्स ताकि आप इसके साथ खेल सकें: https://codesandbox.io/s/epic-field -bdwyi?file=/src/index.js

import _ from "lodash";

const locs = [{ location_key: [32, 22, 11] }, { location_key: [41, 42] }];
const bulkConfigs = [
  {
    dataValues: {
      config_key: 100
    }
  },
  {
    dataValues: {
      config_key: 200
    }
  }
];

// map over the array of bulckConfigs and get indexes
const mergedArrays = _.map(bulkConfigs, (bulkConfig, i) => {
  // create the object that we need
  const objectNeed = {
    // flatMap over the locs array to get flat values from objects in it
    location_key: _.flatMap(locs, ({ location_key }, index) => {
      // match the indexs of both arrays
      if (index === i) {
        // return the location_key values for each config
        return location_key;
      } else {
        // compact to remove the undefinded values returned
        return _.compact();
      }
    }),
    config_key: bulkConfig.dataValues.config_key,
    autoassign: 1
  };

  return objectNeed;
});

// now we just need to crate the same object as many locations and use flatMap to flatten the objects
const allObjects = _.flatMap(mergedArrays, mergedArray => {
  const yy = _.map(mergedArray.location_key, location => {
    const zz = {
      location_key: location,
      config_key: mergedArray.config_key,
      autoassign: 1
    };
    return zz;
  });
  return yy;
});

console.log(allObjects);

और इसका और अधिक सुंदर संस्करण :)

const getConfigs = (locEl, index) => {
  return _.map(locEl.location_key, (locationKey) => {
    return {
      location_key: locationKey,
      config_key: bulkConfigs[index].dataValues.config_key,
      autoassign: 1,
    };
  });
};

const configLocations = _.chain(locs)
  .map(getConfigs)
  .flatten()
  .value();

console.log(configLocations);
0
Tornado 17 अप्रैल 2020, 22:29