জাভাস্ক্রিপ্টে, কীভাবে শর্তসাপেক্ষে কোনও অবজেক্টে সদস্য যুক্ত করা যায়?


385

আমি শর্তসাপেক্ষে যুক্ত সদস্যের সাথে একটি অবজেক্ট তৈরি করতে চাই। সহজ পদ্ধতিটি হ'ল:

var a = {};
if (someCondition)
    a.b = 5;

এখন, আমি আরও একটি idiomatic কোড লিখতে চাই। আমি চেষ্টা করছি:

a = {
    b: (someCondition? 5 : undefined)
};

তবে এখন, যার মূল্য তার bএকটি সদস্য । এটি পছন্দসই ফলাফল নয়।aundefined

কোন সহজ সমাধান আছে?

হালনাগাদ

আমি এমন একটি সমাধান চাই যা বেশ কয়েকটি সদস্যের সাথে সাধারণ কেস পরিচালনা করতে পারে।

a = {
  b: (conditionB? 5 : undefined),
  c: (conditionC? 5 : undefined),
  d: (conditionD? 5 : undefined),
  e: (conditionE? 5 : undefined),
  f: (conditionF? 5 : undefined),
  g: (conditionG? 5 : undefined),
 };

23
হ্যা এখানে; কোড প্রথম বিট।
পাওলো বার্গান্টিনো

5
নিশ্চিত নয় যে
আইডিয়োমেটিক

এটা আসলে কি ব্যাপার? যদি আপনি কখনই সংজ্ঞায়িত না হন a.b, পুনরুদ্ধার করা যাই হোক না কেন a.bফিরে আসবে undefined
তীমু

4
@ টিমু: inঅপারেটরটি কখন ব্যবহৃত হবে তা বিবেচ্য হতে পারে ।

1
আক্ষরিক অবজেক্টগুলিতে এখনকার শর্তসাপেক্ষ বৈশিষ্ট্য থাকার কোনও উপায় নেই তবে আমি আশা করি তারা এএস 7 এ যুক্ত করে, বিশেষত সার্ভার সাইড প্রোগ্রামিংয়ে এটি খুব সহজ হতে পারে!
আলী

উত্তর:


118

খাঁটি জাভাস্ক্রিপ্টে, আমি আপনার প্রথম কোড স্নিপেটের চেয়ে বেশি মুগ্ধকর কিছু ভাবতে পারি না।

তবে, jQuery লাইব্রেরি ব্যবহার করা যদি প্রশ্নটির বাইরে না থাকে, তবে ডকুমেন্টেশনে যেমন বলা হয়েছে তখন $ .extend () আপনার প্রয়োজনীয়তা পূরণ করতে হবে:

অপরিজ্ঞাত বৈশিষ্ট্য অনুলিপি করা হয় না।

অতএব, আপনি লিখতে পারেন:

var a = $.extend({}, {
    b: conditionB ? 5 : undefined,
    c: conditionC ? 5 : undefined,
    // and so on...
});

এবং আপনি প্রত্যাশিত ফলাফলগুলি পান (যদি conditionBতা হয় falseতবে bতা বিদ্যমান থাকবে না a)।


21
আরও অনেক ভাল পদ্ধতি আছে যার জন্য jQuery প্রয়োজন হয় না। জেমি হিলের উত্তরটি একবার দেখুন।
অ্যান্ড্রু রাসমুসেন

13
@ অ্যান্ড্রু, এই উত্তরটির জন্য ES6 দরকার, যা আমার লেখার সময় উপস্থিত ছিল না।
ফ্রিডরিক হামিদি

নাল কি একইভাবে কাজ করে? বা এটি অপরিবর্তিত করা আছে?
Aous1000

এটি আসলে একটি ভুল উত্তর, কারণ এটি jQuery ব্যবহার করে এবং এই ত্রৈমাসিক শর্তটি কোনও বস্তু থেকে কোনও সম্পত্তি সরিয়ে ফেলবে না, এটি ঠিক সম্পত্তিটিকে অপরিজ্ঞাত হিসাবে সেট করবে। এটি করার সঠিক উপায়ের জন্য @ ল্যাগিস্টোসের উত্তর দেখুন
আলেকজান্ডার কিম

: হাঁ নিচে জেমি এর উত্তর খুঁজে বার করো stackoverflow.com/a/40560953/10222449
MadMac

867

আমি মনে করি @ ইনস্পায়ারডজেডাব্লু এটা ইএস 5 দিয়ে করেছে, এবং @ ট্রিনকোট যেমনটি বলেছে, এস 6 ব্যবহার করা আরও ভাল পদ্ধতির। তবে আমরা স্প্রেড অপারেটর এবং লজিকাল এবং শর্ট সার্কিট মূল্যায়ন ব্যবহার করে আরও কিছুটা চিনি যুক্ত করতে পারি:

const a = {
   ...(someCondition && {b: 5})
}

2
আমি ঠিক এটি সঠিক কিনা তা নিশ্চিত নই, প্রস্তাবটিতে বলা হয়েছে Null/Undefined Are Ignored, এটি falseউপেক্ষা করা হয় না । ট্রান্সপ্লেলাররা বর্তমানে এটির মাধ্যমে অনুমতি দিতে পারে তবে এটি কি অনুগত? নিম্নলিখিতগুলি হওয়া উচিত {...someCondition ? {b: 5} : null}তবে কমপ্যাক্ট হিসাবে নয়।
বেনিয়ামিন ডোবেল

23
আমি জিজ্ঞাসা করেছি যে ছড়িয়ে ছিটিয়ে প্রস্তাব দেওয়া লোকদের কাছে এটি বৈধ কিনা এবং তারা বলেছিল এটি ঠিক আছে। github.com/tc39/proposal-object-rest-spread/issues/45 , সিসি
@ বেনজামিনডোবেল

73
@ অ্যালানএইচ স্প্রেড অপারেটর শর্টহ্যান্ডের মতো Object.assignএবং অ্যান্ড অ্যান্ড অপারেটরের তুলনায় এর চেয়ে কম অগ্রাধিকার রয়েছে। এটি সম্পত্তি ছাড়াই মানটিকে উপেক্ষা করে (বুলিয়ান, নাল, অপরিজ্ঞাত, সংখ্যা), এবং ...স্থানটির পরে বস্তুর সমস্ত বৈশিষ্ট্য যুক্ত করে । মনে রাখবেন &&অপারেটরটি যদি সত্য হয়, বা অন্যথায় মিথ্যা হিসাবে সঠিক মান দেয়। তাই যদি someConditionসত্য হয়, {b : 5}পাস করা হবে না ...সম্পত্তি যোগ ফলে অপারেটর, bকরতে aমান 5। হয় someConditionমিথ্যা, falseপ্রেরণ করা হবে ...অপারেটর। ফলে কিছুই যুক্ত হয় না। এটা চালাক আমি এটা ভালোবাসি.
ফলিক্স ব্রুনেট

11
দুর্দান্ত উত্তর, তবে শর্তটি এবং ফলস্বরূপ অবজেক্টটিকে প্রথম বন্ধনীতে ছড়িয়ে দেওয়া এই উদাহরণের পঠনযোগ্যতার ব্যাপক উন্নতি করবে। সবাই জেএস অপারেটরকে হৃদয় দিয়ে প্রাধান্য দেয় না।
নিউরোট্রান্সমিটার

6
কেবলমাত্র অন্য একটি সমস্যা হ'ল আপনি এটি মিথ্যা বুলেটিনগুলির জন্য ব্যবহার করতে পারবেন না।
ggb667

92

EcmaScript2015 এর সাহায্যে আপনি ব্যবহার করতে পারেন Object.assign:

Object.assign(a, conditionB ? { b: 1 } : null,
                 conditionC ? { c: 2 } : null,
                 conditionD ? { d: 3 } : null);

কিছু মন্তব্য:

  • Object.assign প্রথম যুক্তিটিকে স্থানে পরিবর্তন করে, তবে এটি আপডেট হওয়া বস্তুটিও ফেরত দেয়: সুতরাং আপনি এই পদ্ধতিটিকে বৃহত্তর অভিব্যক্তিতে ব্যবহার করতে পারেন যা বস্তুটিকে আরও চালিত করে।
  • আপনি পরিবর্তে nullপাস করতে পারেন undefinedবা {}, একই ফলাফল সঙ্গে। আপনি তার 0পরিবর্তে এমনকি সরবরাহ করতে পারেন , কারণ আদিম মানগুলি মোড়ানো হয়, এবং Numberএর নিজস্ব কোনও অগণিত গুণ নেই

আরও সংক্ষিপ্ত

দ্বিতীয় বিন্দু আরও টেকিং, আপনি এটি নিম্নরূপ (যেমন @Jamie সরু আউট আছে), যেমন falsy মান কোন নিজস্ব গণনীয় বৈশিষ্ট্য আছে (কমান পারে false, 0, NaN, null, undefined, ''ছাড়া document.all):

Object.assign(a, conditionB && { b: 1 },
                 conditionC && { c: 2 },
                 conditionD && { d: 3 });


1
আমি প্রাথমিক সমাধানটি পছন্দ করি: কী চলছে তা নির্ধারণ করা সহজ - আমি নিশ্চিত হতে পারি না যে কোনও আদিম মান (কমপক্ষে স্পষ্টের দিকে না তাকিয়ে নয়) দিয়ে কী হয়।
অ্যাক্সেল রাশমায়ার

1
আমি শর্টহ্যান্ডকে পছন্দ করি যা ত্রৈমাসিক যুক্তিকে সহজ করে তোলে। এটাই আমার দরকার ছিল। ধন্যবাদ!
দ্য উথারসাইড

80
const obj = {
   ...(condition) && {someprop: propvalue},
   ...otherprops
}

সরাসরি নমুনা:

const obj = {
  ...(true) && {someprop: 42},
  ...(false) && {nonprop: "foo"},
  ...({}) && {tricky: "hello"},
}

console.log(obj);


7
যদিও এই কোড স্নিপেট একটি ব্যাখ্যা সহ প্রশ্নটি সমাধান করতে পারে, সত্যিই আপনার পোস্টের মান উন্নত করতে সহায়তা করে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, এবং সেই লোকেরা আপনার কোড পরামর্শের কারণগুলি জানেন না।
রাল্ফ স্টুবনার

1
এই উত্তরটি 2 বছর আগে জেমি হিলের উত্তরে কী যুক্ত করে ?
ড্যান ড্যাসক্লেস্কু

এর সাথে যদি কনড মেলে না তবে অনির্ধারিত ফিরে আসবে।
মোস্তকিম কে

2
এটি কাজ করে এবং অন্যান্য উত্তর আইএমওর তুলনায় এটিতে সুন্দর সিনট্যাক্স রয়েছে।
সেফ রিড

1
সংক্ষিপ্ত ব্যাখ্যাটি এরকম হয়: "..." স্প্রেড অপারেটরটি বস্তুকে আক্ষরিকভাবে ডিকনস্ট্রাক্ট করে এবং এটিকে "আপত্তি" তে যুক্ত করে যেমন এই ক্ষেত্রে ... (সত্য) && {সাম্প্রোপ: 42}, পুরো শব্দটি যা ডিকনস্ট্রাক্ট করা হবে তা হ'ল "(সত্য) && {সাম্প্রোপ: 42}", এক্ষেত্রে বুলিয়ান সত্য এবং শব্দটি কেবল ফলন দেয় {সাম্প্রোপ: 42} যা পরে ডিকনস্ট্রাক্ট করে আপত্তিতে যুক্ত হয়। যদি পরিবর্তে বুলিয়ানটি মিথ্যা হয়, তবে শব্দটি ঠিক মিথ্যা হবে, এবং কোনও কিছুই ডিকনস্ট্রাক্ট করা হবে না এবং আপত্তিতে যুক্ত করা হবে
কিওনগ উ

50

বুলিয়ান সহ স্প্রেড সিনট্যাক্স ব্যবহার (এখানে প্রস্তাবিত হিসাবে) বৈধ সিনট্যাক্স নয়। স্প্রেড কেবল পুনরাবৃত্ততার সাথে ব্যবহার করা যেতে পারে ।

আমি নিম্নলিখিত পরামর্শ:

const a = {
   ...(someCondition? {b: 5}: {} )
}

2
@ হোসামমুরাদ, এটি হওয়া উচিত নয়, কারণ প্রস্তাবিত কোডটি ইতিমধ্যে 2 বছরেরও বেশি আগে পোস্ট করা উত্তরটিতে ব্যবহৃত হয়েছিল। এবং প্রথম মন্তব্যটি মিথ্যা। এটি বৈধ বাক্য গঠন:{...false}
ট্রিনকোট

1
@ ইটাই, এটি সত্য নয়; ছড়িয়ে পড়া সিনট্যাক্সের সাথে ব্যবহৃত হলে আদিম মানগুলি মোড়ানো হয়। {...false}বৈধ বাক্য গঠন।
ট্রিনকোট

@ ট্রিনকোট, আপনি দয়া করে রেফারেন্স সরবরাহ করতে পারেন?
Itai Noam

3
ইকামাস্ক্রিপ্ট 2018 ভাষা নির্দিষ্টকরণ, বিভাগ 12.2.6 (.8) নির্দিষ্ট CopyDataPropertiesকরে যা মান ( falseএই ক্ষেত্রে) এর উপর সঞ্চালিত হয় । এর মধ্যে একটি আদিম বক্সিংয়ের (বিভাগগুলি 7.3.23, 7.1.13) জড়িত। MDN- র আপনার যে লিঙ্কটি রয়েছে সেগুলি বন্ধনীতে এই "ব্যতিক্রম "টির উল্লেখ করেছে।
ট্রিনকোট

একটি রেফারেন্স হিসাবে, এই পোস্টটি দেখুন যেখানে আমি এই একই বিষয়ে প্রসারিত করব।
ট্রিনকোট

26

বর্ধিত অবজেক্ট প্রোপার্টি ব্যবহার করার বিষয়ে এবং সম্পত্তিটি সত্যবাদী হলে কেবল সেট করে রাখুন, যেমন:

[isConditionTrue() && 'propertyName']: 'propertyValue'

সুতরাং শর্তটি পূরণ না হলে এটি পছন্দসই সম্পত্তি তৈরি করে না এবং সুতরাং আপনি এটিকে বাতিল করতে পারেন। দেখুন: http://es6-features.org/# CompompPPerertyNames

আপডেট: অবজেক্ট লিটারাল এবং অ্যারেতে শর্তসাপেক্ষে এন্ট্রি যুক্ত করার বিষয়ে তার ব্লগ নিবন্ধে অ্যাক্সেল রাউশমায়ারের পদ্ধতির অনুসরণ করা আরও ভাল ( http://2ality.com/2017/04/ শর্তসাপেক্ষে- লিটারাল-entries.html ):

const arr = [
  ...(isConditionTrue() ? [{
    key: 'value'
  }] : [])
];

const obj = {
  ...(isConditionTrue() ? {key: 'value'} : {})
};

বেশ আমাকে সাহায্য করেছিল।


1
এটি প্রায় কাজ করবে। সমস্যাটি হ'ল এটি একটি অতিরিক্ত falseকী যুক্ত করবে । উদাহরণস্বরূপ, {[true && 'a']: 17, [false && 'b']: 42}হয়{a:17, false: 42}
viebel

3
আমি আরও সংক্ষিপ্ত ...isConditionTrue() && { propertyName: 'propertyValue' }
পথটি

আরও ভাল উপায়: ... (isConditionTrue ()? {Key: 'value'}: {})
দিমিত্রি রেফসনিডার

এক্সেল রাউশমায়ার ব্লগ লিঙ্কটি এই উত্তরটি দেয়। নিবন্ধে "... insertIf (কন্ড, 'এ')" উদাহরণটি হ'ল আমি যা খুঁজছিলাম। ধন্যবাদ
জোসেফ সিম্পসন


5

যদি লক্ষ্যটি হ'ল অবজেক্টটি স্ব-অন্তর্ভুক্ত হয় এবং একটি ধনুর্বন্ধনী এক সেটের মধ্যে থাকে, আপনি এটি চেষ্টা করতে পারেন:

var a = new function () {
    if (conditionB)
        this.b = 5;

    if (conditionC)
        this.c = 5;

    if (conditionD)
        this.d = 5;
};

5

আপনি যদি এই সার্ভারের পাশ (jquery ব্যতীত) করতে চান তবে আপনি লোডাশ ৪.৩.০ ব্যবহার করতে পারেন:

a = _.pickBy({ b: (someCondition? 5 : undefined) }, _.negate(_.isUndefined));

এবং এটি লোডাশ 3.10.1 ব্যবহার করে কাজ করে

a = _.pick({ b: (someCondition? 5 : undefined) }, _.negate(_.isUndefined));

ES6 এ লোডাশের দরকার নেই।
ড্যান ড্যাসক্লেস্কু

5
var a = {
    ...(condition ? {b: 1} : '') // if condition is true 'b' will be added.
}

আমি আশা করি শর্তের উপর ভিত্তি করে এন্ট্রি যুক্ত করার এটি বেশ কার্যকর উপায়। শর্তসাপেক্ষে কোনও অবজেক্ট ল্যাটারেলের অভ্যন্তরে প্রবেশ কীভাবে যুক্ত করা যায় সে সম্পর্কে আরও তথ্যের জন্য।


3
[...condition?'':['item']]এটি অ্যারে স্ট্রিং আইটেম যুক্ত করবে
ওয়েউ


1
@ ড্যানডাসকলেসকু জেমি হিলের উত্তর আমার উত্তরের চেয়ে ভাল, আমি সেভাবে ভাবিনি এবং আমি আরও তিনজন-অপারেটর লোক ছিলাম।
মাধনকুমার

4

এটির দীর্ঘ উত্তর দেওয়া হয়েছে, তবে অন্যান্য ধারণাগুলি দেখে আমি কিছু আকর্ষণীয় ডেরাইভেটিভ নিয়ে এসেছি:

একই সম্পত্তিটিতে অপরিজ্ঞাত মান নির্ধারণ করুন এবং এটি পরে মুছুন

বেনামে কনস্ট্রাক্টর ব্যবহার করে আপনার অবজেক্টটি তৈরি করুন এবং সর্বদা একই ডামি সদস্যকে অপরিজ্ঞাত সদস্যদের অর্পণ করুন যা আপনি একেবারে শেষে মুছে ফেলেন। এটি আপনাকে সদস্য হিসাবে +1 অতিরিক্ত লাইন প্রতি একক লাইন (খুব জটিল নয় আশা করি) দেবে।

var a = new function() {
    this.AlwaysPresent = 1;
    this[conditionA ? "a" : "undef"] = valueA;
    this[conditionB ? "b" : "undef"] = valueB;
    this[conditionC ? "c" : "undef"] = valueC;
    this[conditionD ? "d" : "undef"] = valueD;
    ...
    delete this.undef;
};

4

আপনি কোনও শর্ত ছাড়াই আপনার সমস্ত অপরিজ্ঞাত মান যুক্ত করতে পারেন এবং তারপরে JSON.stringifyসেগুলি মুছে ফেলার জন্য ব্যবহার করতে পারেন:

const person = {
  name: undefined,
  age: 22,
  height: null
}

const cleaned = JSON.parse(JSON.stringify(person));

// Contents of cleaned:

// cleaned = {
//   age: 22,
//   height: null
// }

2

আমি এটা করতে হবে

var a = someCondition ? { b: 5 } : {};

একটি লাইন কোড সংস্করণ সহ সম্পাদিত


শর্তটি মিথ্যা হলে, একটি নুডফাইন্ড করা হয়, যা সঠিক নয়।
বিঙ্গজি 2680

@ bingjie2680 এটা নয় যে স্পষ্ট তা একটি হওয়া উচিত যখন someCondition মিথ্যা। আমি সবেমাত্র ধরে নিয়েছি a = undefined। এটি সহজেই return { b: undefined };: /
jwchang

@ bingjie2680 তারপর এটি হওয়া উচিত return {};elseঅংশ
jwchang

1
যে না সত্যিই আপনি কী করবেন ... তাই না? আমি বলতে চাইছি এমনকি যদি আপনি নিজের মতো পুরো আক্ষরিক সিনট্যাক্সকে শর্তযুক্ত করেন তবে আপনি শর্তযুক্ত অপারেটরটি ব্যবহার করবেন না কেন? a = condition ? {b:5} : undefined;

3
অভিনন্দন, আপনি কোনও লাভের জন্য সবেমাত্র তিনটি মৃত-সরল রেখা 7-লাইনের ক্রিয়ায় রূপান্তরিত করেছেন। না, বেনামে ফাংশন ব্যবহার করা কোনও সুবিধা নয়।

2

Lodash গ্রন্থাগার ব্যবহার করে, আপনি ব্যবহার করতে পারেন _.omitBy

var a = _.omitBy({
    b: conditionB ? 4 : undefined,
    c: conditionC ? 5 : undefined,
}, _.IsUndefined)

আপনার কাছে requestsচ্ছিক অনুরোধ থাকলে এই ফলাফল কার্যকর হয় hand

var a = _.omitBy({
    b: req.body.optionalA,  //if undefined, will be removed
    c: req.body.optionalB,
}, _.IsUndefined)

0

আমি মনে করি শর্তাধীন সদস্যদের যুক্ত করার জন্য আপনার প্রথম পদ্ধতিটি পুরোপুরি ঠিক আছে। আমি সত্যিই একজন সদস্য আছে অনুপস্থিত না সাথে একমত নই bএর aএকটি মান সঙ্গে undefined। অপারেটরের সাথে লুপের undefinedব্যবহারের সাথে একটি চেক যোগ করার পক্ষে এটি যথেষ্ট সহজ । তবে যাইহোক, আপনি সহজেই সদস্যদের ফিল্টার করতে একটি ফাংশন লিখতে পারেন ।forinundefined

var filterUndefined = function(obj) {
  var ret = {};
  for (var key in obj) {
    var value = obj[key];
    if (obj.hasOwnProperty(key) && value !== undefined) {
      ret[key] = value;
    }
  }
  return ret;
};

var a = filterUndefined({
  b: (conditionB? 5 : undefined),
  c: (conditionC? 5 : undefined),
  d: (conditionD? 5 : undefined),
  e: (conditionE? 5 : undefined),
  f: (conditionF? 5 : undefined),
  g: (conditionG? 5 : undefined),
});

আপনি deleteস্থানে वस्तुটি সম্পাদনা করতে অপারেটরটিও ব্যবহার করতে পারেন ।


0

একটি বস্তু মধ্যে মোড়ানো

এরকম কিছু হ'ল কিছুটা ক্লিনার

 const obj = {
   X: 'dataX',
   Y: 'dataY',
   //...
 }

 const list = {
   A: true && 'dataA',
   B: false && 'dataB',
   C: 'A' != 'B' && 'dataC',
   D: 2000 < 100 && 'dataD',
   // E: conditionE && 'dataE',
   // F: conditionF && 'dataF',
   //...
 }

 Object.keys(list).map(prop => list[prop] ? obj[prop] = list[prop] : null)

একটি অ্যারে মধ্যে মোড়ানো

অথবা আপনি যদি জেমি হিলের পদ্ধতিটি ব্যবহার করতে চান এবং শর্তগুলির একটি দীর্ঘ দীর্ঘ তালিকা পেতে চান তবে আপনাকে অবশ্যই ...একাধিকবার সিনট্যাক্স লিখতে হবে । এটিকে কিছুটা পরিষ্কার করার জন্য, আপনি এগুলি কেবল একটি অ্যারেতে গুটিয়ে রাখতে পারেন, তারপরে reduce()তাদের একক বস্তু হিসাবে ফিরিয়ে আনতে ব্যবহার করুন।

const obj = {
  X: 'dataX',
  Y: 'dataY',
  //...

...[
  true && { A: 'dataA'},
  false && { B: 'dataB'},
  'A' != 'B' && { C: 'dataC'},
  2000 < 100 && { D: 'dataD'},
  // conditionE && { E: 'dataE'},
  // conditionF && { F: 'dataF'},
  //...

 ].reduce(( v1, v2 ) => ({ ...v1, ...v2 }))
}

বা map()ফাংশন ব্যবহার করে

const obj = {
  X: 'dataX',
  Y: 'dataY',
  //...
}

const array = [
  true && { A: 'dataA'},
  false &&  { B: 'dataB'},
  'A' != 'B' && { C: 'dataC'},
  2000 < 100 && { D: 'dataD'},
  // conditionE && { E: 'dataE'},
  // conditionF && { F: 'dataF'},
  //...

 ].map(val => Object.assign(obj, val))

0

এটিই আমি নিয়ে আসতে পারি এমন সর্বাধিক সংক্ষিপ্ত সমাধান:

var a = {};
conditionB && a.b = 5;
conditionC && a.c = 5;
conditionD && a.d = 5;
// ...

-1

Lodash গ্রন্থাগার ব্যবহার করে, আপনি ব্যবহার করতে পারেন _.merge

var a = _.merge({}, {
    b: conditionB ? 4 : undefined,
    c: conditionC ? 5 : undefined,
})
  1. কন্ডিশনবি যদি হয় falseএবং শর্তসাপেক্ষী হয় true, তবেa = { c: 5 }
  2. কন্ডিশনবি এবং কন্ডিশনসি উভয়ই যদি থাকে trueতবেa = { b: 4, c: 5 }
  3. কন্ডিশনবি এবং কন্ডিশনসি উভয়ই যদি থাকে falseতবেa = {}

আমি একটি ভিন্ন ফলাফল পেতে। আমি ব্যবহার করছি lodash@^4.0.0undefinedআমার মামলায় অন্তর্ভুক্ত করা হচ্ছে।
জননিকিউ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.