উত্তর:
আপনি যদি সমস্ত মিথ্যা মানগুলি মুছে ফেলতে চান তবে সর্বাধিক কমপ্যাক্ট উপায় হ'ল:
জন্য Lodash 4.x এবং পরে :
_.pickBy({ a: null, b: 1, c: undefined }, _.identity);
>> Object {b: 1}
জন্য উত্তরাধিকার Lodash 3.x:
_.pick(obj, _.identity);
_.pick({ a: null, b: 1, c: undefined }, _.identity);
>> Object {b: 1}
false
সমেত বুলিয়ান সম্পত্তি মুছে ফেলবে
আপনি কেবল শৃঙ্খলা তৈরি _.omit()
করতে _.isUndefined
এবং _.isNull
রচনাগুলি তৈরি করতে পারেন এবং অলস মূল্যায়নের সাথে ফলাফল পেতে পারেন।
var result = _(my_object).omit(_.isUndefined).omit(_.isNull).value();
14 মার্চ, 2016 আপডেট করুন :
মন্তব্য বিভাগে ডিল্যান্ট দ্বারা উল্লিখিত হিসাবে , আপনার _.omitBy()
ফাংশনটি ব্যবহার করা উচিত কারণ এটি কোনও সম্পত্তির পরিবর্তে একটি শিকারী ব্যবহার করে । আপনার এটি লোড্যাশ সংস্করণ 4.0.0
এবং উপরের জন্য ব্যবহার করা উচিত ।
var result = _(my_object).omitBy(_.isUndefined).omitBy(_.isNull).value();
জুন 1, 2016 আপডেট করুন :
ম্যাক্স ট্রুক্সার মন্তব্য অনুসারে , লোডাশ ইতিমধ্যে একটি বিকল্প সরবরাহ করেছে _.isNil
, যা উভয়ের জন্য পরীক্ষা করে null
এবং undefined
:
var result = _.omitBy(my_object, _.isNil);
omitBy
ফাংশনটি পরিবর্তে ব্যবহার করা উচিত omit
। সুতরাং_(my_object).omitBy(_.isUndefined).omitBy(_.isNull).value();
_.isNil
পরিবর্তে chaining এর _.isUndefined
এবং _.isNull
। এটি এটিকে আরও খাটো করে তোলে:var result = _.omitBy(my_object, _.isNil);
omitBy
চেয়ে কম পারফরম্যান্ট pickBy
, সুতরাং পরবর্তীটি পছন্দ করা উচিত এবং পুনরাবৃত্ত ফাংশনের শর্তটি বিপরীত। উপরে গৃহীত উত্তরটি সে অধিকার পেয়েছে।
null
এবং undefined
মানগুলি উল্লেখ করে । identity
সম্পৃক্ত এছাড়াও সরাবে false
মান, তাই আপনি যদি কেবল প্রশ্ন আমার উত্তর নিয়ে একটি সমস্যা অভিপ্রায় তারপর আমি দেখতে পাচ্ছি না উপরে এটা ভিত্তি করে। অতিরিক্তভাবে, আমরা যদি "পারফরম্যান্স" সম্পর্কে টক্কর দিই, omitBy
কেবল pickBy
একটি অবহেলিত identity
প্রিকিকেটের সাথে ডিফল্টরূপে কল করি। সুতরাং, পারফরম্যান্সের দিক থেকে এটি উল্লেখযোগ্য হতে খুব ছোট।
আপনি যদি লড্যাশ ব্যবহার করছেন তবে আপনি _.compact(array)
অ্যারে থেকে সমস্ত মিথ্যা মান সরিয়ে ফেলতে পারেন ।
_.compact([0, 1, false, 2, '', 3]);
// => [1, 2, 3]
_.pickBy(object, _.isNumber)
।
সঠিক উত্তরটি হ'ল:
_.omitBy({ a: null, b: 1, c: undefined, d: false }, _.isNil)
ফলাফলগুলি:
{b: 1, d: false}
অন্যান্য ব্যক্তিদের দ্বারা এখানে দেওয়া বিকল্প:
_.pickBy({ a: null, b: 1, c: undefined, d: false }, _.identity);
false
এখানে মানগুলি পছন্দ করে না এমন মানগুলিও সরিয়ে ফেলবে ।
{"a":1,"b":{"a":1,"b":null,"c":undefined}}
, অবজেক্ট.বি সম্পত্তি b
, 'সি' সরানো হবে না
শুধু:
_.omit(my_object, _.isUndefined)
null
উপরেরগুলি অ্যাকাউন্টের মান গ্রহণ করে না , কারণ এগুলি মূল উদাহরণ থেকে অনুপস্থিত এবং কেবলমাত্র বিষয়টিতে উল্লিখিত হয়েছে, তবে আমি এটি এটিকে মার্জিত হিসাবে এবং এটির ব্যবহারগুলি থাকতে পারে বলে রেখে দিয়েছি।
এখানে সম্পূর্ণ উদাহরণ, কম সংক্ষিপ্ত, তবে আরও সম্পূর্ণ।
var obj = { a: undefined, b: 2, c: 4, d: undefined, e: null, f: false, g: '', h: 0 };
console.log(_.omit(obj, function(v) { return _.isUndefined(v) || _.isNull(v); }));
_.omitBy
।
অন্যান্য উত্তরগুলি সম্পূর্ণ করার জন্য, লোডাস 4 এ কেবল অপরিজ্ঞাত এবং নাল উপেক্ষা করার জন্য (এবং এর মতো বৈশিষ্ট্য নয় false
) আপনি একটি প্রিকিকেট ব্যবহার করতে পারেন _.pickBy
:
_.pickBy(obj, v !== null && v !== undefined)
নীচে উদাহরণ:
const obj = { a: undefined, b: 123, c: true, d: false, e: null};
const filteredObject = _.pickBy(obj, v => v !== null && v !== undefined);
console.log = (obj) => document.write(JSON.stringify(filteredObject, null, 2));
console.log(filteredObject);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script>
0
, ''
, false
মান। এছাড়াও আপনি কলব্যাকটি সংক্ষিপ্ত করতে পারেন v => v != null
।
লোডাশ ডক্স অনুসারে:
_.compact(_.map(array, fn))
এছাড়াও আপনি সমস্ত নাল ফিল্টার করতে পারেন
গভীর নেস্টেড অবজেক্টের জন্য আপনি লড্যাশ> 4 এর জন্য আমার স্নিপেট ব্যবহার করতে পারেন
const removeObjectsWithNull = (obj) => {
return _(obj)
.pickBy(_.isObject) // get only objects
.mapValues(removeObjectsWithNull) // call only for values as objects
.assign(_.omitBy(obj, _.isObject)) // save back result that is not object
.omitBy(_.isNil) // remove null and undefined from object
.value(); // get value
};
আমি undefined
কোনও অবজেক্ট (গভীরভাবে) থেকে সরিয়ে নিয়ে একইরকম সমস্যার মুখোমুখি হয়েছি এবং দেখেছি যে আপনি যদি আপনার সরল পুরাতন অবজেক্টটি রূপান্তর করতে এবং জেএসওএন ব্যবহার করতে ঠিক থাকেন তবে দ্রুত এবং নোংরা সহায়ক ফাংশনটি দেখতে এরকম হবে:
function stripUndefined(obj) {
return JSON.parse(JSON.stringify(obj));
}
"... যদি পূর্বনির্ধারিত হয়, রূপান্তরকালে কোনও ফাংশন, বা একটি চিহ্ন দেখা যায় তবে তা বাদ দেওয়া হয় (যখন এটি কোনও বস্তুতে পাওয়া যায়) বা নালকে সেন্সর করা হয় (যখন এটি অ্যারেতে পাওয়া যায়)"।
খাঁটি জাভাস্ক্রিপ্ট সহ: (যদিও অবজেক্ট.এন্ট্রিগুলি ES7, অবজেক্ট.সেসাইন ES6; তবে সমতুল্য ES5 অবজেক্ট.কিগুলি ব্যবহার করে কেবল এটি করণীয়ও হওয়া উচিত); v != null
নাল এবং অপরিজ্ঞাত উভয়ের জন্য চেকগুলিও লক্ষ্য করুন ;
> var d = { a:undefined, b:2, c:0, d:undefined, e: null, f: 0.3, s: "", t: false };
undefined
> Object.entries(d)
.filter(([ k, v ]) => (v != null))
.reduce((acc, [k, v]) => Object.assign(acc, {[k]: v}), {})
{ b: 2, c: 0, f: 0.3, s: '', t: false }
সম্পাদনা করুন: এটি নীচে কেবল ES5 অবজেক্ট.কিজ সহ সংস্করণ: তবে সাধারণত নোড ভি 8-তে ES7 সহ বেশ উপভোগযোগ্য ;-)
> Object.keys(d)
.filter(function(k) { return d[k] != null; })
.reduce(function(acc, k) { acc[k] = d[k]; return acc; }, {});
{ b: 2, c: 0, f: 0.3, s: '', t: false }
অক্টোবর 2017 এ আপডেট করুন : নোড ভি 8 এর সাথে (ভি 8.3 বা তার থেকে) এখন এতে অবজেক্ট স্প্রেড কনস্ট্রাক্ট রয়েছে:
> var d = { a:undefined, b:2, c:0, d:undefined,
e: null, f: -0.0, s: "", t: false, inf: +Infinity, nan: NaN };
undefined
> Object.entries(d)
.filter(([ k, v ]) => (v != null))
.reduce((acc, [k, v]) => ({...acc, [k]: v}), {})
{ b: 2, c: 0, f: -0, s: '', t: false, inf: Infinity, nan: NaN }
বা একের মধ্যে কেবল হ্রাস করুন:
> Object.entries(d)
.reduce((acc, [k, v]) => (v==null ? acc : {...acc, [k]: v}), {})
{ b: 2, c: 0, f: -0, s: '', t: false, inf: Infinity, nan: NaN }
আপডেট: কেউ পুনরুক্তি চান? তাও তেমন শক্ত নয়, কেবল আইসজেক্টের অতিরিক্ত চেকের প্রয়োজন, এবং পুনরাবৃত্তভাবে নিজেকে কল করুন:
> function isObject(o) {
return Object.prototype.toString.call(o) === "[object Object]"; }
undefined
> function dropNullUndefined(d) {
return Object.entries(d)
.reduce((acc, [k, v]) => (
v == null ? acc :
{...acc, [k]: (isObject(v) ? dropNullUndefined(v) : v) }
), {});
}
> dropNullUndefined({a: 3, b:null})
{ a: 3 }
> dropNullUndefined({a: 3, b:null, c: { d: 0, e: undefined }})
{ a: 3, c: { d: 0 } }
আমার উপসংহার: খাঁটি জাভাস্ক্রিপ্ট যদি করতে পারে তবে আমি কোনও তৃতীয় পক্ষের লাইব্রেরি নির্ভরতা এড়িয়ে যাব:
যেহেতু আপনার মধ্যে কেউ কেউ প্রশ্নটিতে এসে পৌঁছেছেন কেবলমাত্র সরিয়ে দেওয়ার জন্য undefined
, তাই আপনি ব্যবহার করতে পারেন:
লোডাশ পদ্ধতির সংমিশ্রণ
_.omitBy(object, _.isUndefined)
rundef
প্যাকেজ, যা শুধুমাত্র সরিয়ে ফেলা undefined
বৈশিষ্ট্য
rundef(object)
আপনার যদি পুনরাবৃত্তভাবেundefined
বৈশিষ্ট্যগুলি অপসারণ করতে হয় তবে rundef
প্যাকেজের একটি recursive
বিকল্পও রয়েছে।
rundef(object, false, true);
আরও বিশদ জন্য ডকুমেন্টেশন দেখুন ।
এখানে আমি যাচ্ছি লোডাশ পদ্ধতির:
_(my_object)
.pairs()
.reject(function(item) {
return _.isUndefined(item[1]) ||
_.isNull(item[1]);
})
.zipObject()
.value()
জোড়া () ফাংশন কী / মান অ্যারে একটি অ্যারের মধ্যে ইনপুট বস্তুর সক্রিয়। আপনি এটি এটি করেন যাতে অপসারণ () অপসারণ undefined
এবং null
মানগুলি ব্যবহার করা সহজ । এর পরে, আপনি এমন জুটি রেখে গেছেন যা প্রত্যাখ্যান করা হয়নি, এবং এগুলি ইনপুট হ'ল জিপবজেক্ট () , যা আপনার জন্য আপনার অবজেক্টকে পুনর্গঠন করে।
undefined == null
আমরা নিম্নলিখিত হিসাবে লিখতে পারি যে অ্যাকাউন্ট গ্রহণ করা :
let collection = {
a: undefined,
b: 2,
c: 4,
d: null,
}
console.log(_.omit(collection, it => it == null))
// -> { b: 2, c: 4 }
সংক্ষিপ্ততম উপায় (লড্যাশ ভি 4):
_.pickBy(my_object)
লোডাশ (বা আন্ডারস্কোর) সহ আপনি করতে পারেন
var my_object = { a:undefined, b:2, c:4, d:undefined, e:null };
var passedKeys = _.reject(Object.keys(my_object), function(key){ return _.isUndefined(my_object[key]) || _.isNull(my_object[key]) })
newObject = {};
_.each(passedKeys, function(key){
newObject[key] = my_object[key];
});
অন্যথায়, ভ্যানিলা জাভাস্ক্রিপ্ট সহ, আপনি এটি করতে পারেন
var my_object = { a:undefined, b:2, c:4, d:undefined };
var new_object = {};
Object.keys(my_object).forEach(function(key){
if (typeof my_object[key] != 'undefined' && my_object[key]!=null){
new_object[key] = my_object[key];
}
});
ভুয়া পরীক্ষা ব্যবহার না করা, কারণ কেবল "অপরিজ্ঞাত" বা "নাল" প্রত্যাখ্যান করা হবে না , এটি অন্যান্য মিথ্যা মান যেমন "মিথ্যা", "0", খালি স্ট্রিং,}}} সুতরাং, কেবল এটি সহজ এবং বোধগম্য করার জন্য, আমি উপরে কোডেড হিসাবে সুস্পষ্ট তুলনা ব্যবহার করতে পছন্দ করেছি।
সমস্ত মিথ্যা মানগুলি বাদ দিতে কিন্তু বুলিয়ান আদিমিকে এই সমাধানে সহায়তা করে।
_.omitBy(fields, v => (_.isBoolean(v)||_.isFinite(v)) ? false : _.isEmpty(v));
let fields = {
str: 'CAD',
numberStr: '123',
number : 123,
boolStrT: 'true',
boolStrF: 'false',
boolFalse : false,
boolTrue : true,
undef: undefined,
nul: null,
emptyStr: '',
array: [1,2,3],
emptyArr: []
};
let nobj = _.omitBy(fields, v => (_.isBoolean(v)||_.isFinite(v)) ? false : _.isEmpty(v));
console.log(nobj);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.11/lodash.min.js"></script>
var my_object = { a:undefined, b:2, c:4, d:undefined };
var newObject = _.reject(my_collection, function(val){ return _.isUndefined(val) })
//--> newCollection = { b: 2, c: 4 }
আমি আন্ডারস্কোর ব্যবহার করব এবং খালি স্ট্রিংগুলিরও যত্ন নেব:
var my_object = { a:undefined, b:2, c:4, d:undefined, k: null, p: false, s: '', z: 0 };
var result =_.omit(my_object, function(value) {
return _.isUndefined(value) || _.isNull(value) || value === '';
});
console.log(result); //Object {b: 2, c: 4, p: false, z: 0}
jsbin ।
গভীর নেস্টেড অবজেক্ট এবং অ্যারেগুলির জন্য। এবং স্ট্রিং এবং NaN থেকে খালি মানগুলি বাদ দিন
function isBlank(value) {
return _.isEmpty(value) && !_.isNumber(value) || _.isNaN(value);
}
var removeObjectsWithNull = (obj) => {
return _(obj).pickBy(_.isObject)
.mapValues(removeObjectsWithNull)
.assign(_.omitBy(obj, _.isObject))
.assign(_.omitBy(obj, _.isArray))
.omitBy(_.isNil).omitBy(isBlank)
.value();
}
var obj = {
teste: undefined,
nullV: null,
x: 10,
name: 'Maria Sophia Moura',
a: null,
b: '',
c: {
a: [{
n: 'Gleidson',
i: 248
}, {
t: 'Marta'
}],
g: 'Teste',
eager: {
p: 'Palavra'
}
}
}
removeObjectsWithNull(obj)
ফলাফল:
{
"c": {
"a": [
{
"n": "Gleidson",
"i": 248
},
{
"t": "Marta"
}
],
"g": "Teste",
"eager": {
"p": "Palavra"
}
},
"x": 10,
"name": "Maria Sophia Moura"
}
আমি _.পিকবি ব্যবহার করতে পছন্দ করি, কারণ আপনি যা অপসারণ করছেন তাতে আপনার সম্পূর্ণ নিয়ন্ত্রণ রয়েছে:
var person = {"name":"bill","age":21,"sex":undefined,"height":null};
var cleanPerson = _.pickBy(person, function(value, key) {
return !(value === undefined || value === null);
});
উত্স: https://www.codegrepper.com/?search_term=lodash+remove+ অপরিবর্তিত+ মানগুলি +++ অবজেক্ট
আপনারা যারা এখানে আসছেন তারা অবজেক্টগুলির একটি অ্যারে থেকে সরানোর জন্য এবং লোডাশ ব্যবহার করে আপনি এর মতো কিছু করতে পারেন:
const objects = [{ a: 'string', b: false, c: 'string', d: undefined }]
const result = objects.map(({ a, b, c, d }) => _.pickBy({ a,b,c,d }, _.identity))
// [{ a: 'string', c: 'string' }]
দ্রষ্টব্য: আপনি না চাইলে আপনাকে ধ্বংস করতে হবে না।
_.pickBy(obj, _.identity);