আমি কীভাবে জাভাস্ক্রিপ্টের অ্যারে থেকে খালি উপাদানগুলি সরিয়ে ফেলব?
সোজা উপায় আছে কি, বা আমার এটির মধ্য দিয়ে লুপ নেওয়ার এবং সেগুলি ম্যানুয়ালি সরানোর দরকার আছে?
আমি কীভাবে জাভাস্ক্রিপ্টের অ্যারে থেকে খালি উপাদানগুলি সরিয়ে ফেলব?
সোজা উপায় আছে কি, বা আমার এটির মধ্য দিয়ে লুপ নেওয়ার এবং সেগুলি ম্যানুয়ালি সরানোর দরকার আছে?
উত্তর:
সম্পাদনা: প্রায় নয় বছর আগে এই প্রশ্নের উত্তর দেওয়া হয়েছিল যখন সেখানে কোনও কার্যকর অন্তর্নির্মিত পদ্ধতি ছিল না Array.prototype
।
এখন, অবশ্যই, আমি আপনাকে filter
পদ্ধতিটি ব্যবহার করার পরামর্শ দিচ্ছি ।
মনে রাখবেন যে এই পদ্ধতিটি আপনাকে এমন উপাদানগুলির সাথে একটি নতুন অ্যারে ফিরিয়ে দেবে যা আপনি প্রদত্ত কলব্যাক ফাংশনের মানদণ্ডটি পাস করে।
উদাহরণস্বরূপ, আপনি যদি মুছে ফেলতে চান null
বা undefined
মানগুলি চান:
var array = [0, 1, null, 2, "", 3, undefined, 3,,,,,, 4,, 4,, 5,, 6,,,,];
var filtered = array.filter(function (el) {
return el != null;
});
console.log(filtered);
এটি আপনার "খালি" হিসাবে বিবেচনা করে তার উপর নির্ভর করবে উদাহরণস্বরূপ, আপনি যদি স্ট্রিং নিয়ে কাজ করে থাকেন তবে উপরের ফাংশনটি খালি স্ট্রিংয়ের উপাদানগুলি সরিয়ে ফেলবে না।
এক টিপিক্যাল প্যাটার্ন যে আমি প্রায়ই ব্যবহার করা দেখুন উপাদান আছে যা হয় অপসারণ করা হয় falsy , যা একটি খালি স্ট্রিং অন্তর্ভুক্ত ""
, 0
, NaN
, null
, undefined
, এবং false
।
আপনি filter
পদ্ধতিতে, Boolean
কনস্ট্রাক্টর ফাংশনে যেতে পারেন বা ফিল্টার মানদণ্ডের কার্যক্রমে একই উপাদানটি ফিরে আসতে পারেন, উদাহরণস্বরূপ:
var filtered = array.filter(Boolean);
অথবা
var filtered = array.filter(function(el) { return el; });
উভয় উপায়েই, এটি কাজ করে কারণ filter
প্রথম ক্ষেত্রে পদ্ধতিটি Boolean
কনস্ট্রাক্টরকে একটি ফাংশন হিসাবে ডাকে , মান রূপান্তর করে এবং দ্বিতীয় ক্ষেত্রে, filter
পদ্ধতিটি অভ্যন্তরীণভাবে কলব্যাকের ফেরতের মানকে অন্তর্নিহিতভাবে রূপান্তর করে Boolean
।
যদি আপনি স্পার্স অ্যারে নিয়ে কাজ করছেন এবং আপনি "গর্তগুলি" থেকে মুক্তি পাওয়ার চেষ্টা করছেন, আপনি filter
কলব্যাক পাস করার পদ্ধতিটি ব্যবহার করতে পারেন যা সত্য ফিরে আসে, উদাহরণস্বরূপ:
var sparseArray = [0, , , 1, , , , , 2, , , , 3],
cleanArray = sparseArray.filter(function () { return true });
console.log(cleanArray); // [ 0, 1, 2, 3 ]
পুরানো উত্তর: এটি করবেন না!
আমি দেশী অ্যারে প্রোটোটাইপ প্রসারিত করে এই পদ্ধতিটি ব্যবহার করি:
Array.prototype.clean = function(deleteValue) {
for (var i = 0; i < this.length; i++) {
if (this[i] == deleteValue) {
this.splice(i, 1);
i--;
}
}
return this;
};
test = new Array("", "One", "Two", "", "Three", "", "Four").clean("");
test2 = [1, 2,, 3,, 3,,,,,, 4,, 4,, 5,, 6,,,,];
test2.clean(undefined);
অথবা আপনি কেবল বিদ্যমান উপাদানগুলিকে অন্য অ্যারেতে ঠেলাতে পারেন:
// Will remove all falsy values: undefined, null, 0, false, NaN and "" (empty string)
function cleanArray(actual) {
var newArray = new Array();
for (var i = 0; i < actual.length; i++) {
if (actual[i]) {
newArray.push(actual[i]);
}
}
return newArray;
}
cleanArray([1, 2,, 3,, 3,,,,,, 4,, 4,, 5,, 6,,,,]);
splice
কল সত্যিই পুরোনো ব্রাউজারে ব্যয়বহুল কারণ তারা ফাঁক আপ বন্ধ করতে অ্যারে কি সব পুনরায় নম্বর আছে।
Array.prototype
করা উচিত এবং তারপরে প্রতিটি লুপের ফলে কার্যকর পারফরম্যান্স হিট এড়ানো উচিত । Object.defineProperty
.hasOwnProperty
var arr = [1,2,,3,,-3,null,,0,,undefined,4,,4,,5,,6,,,,];
arr.filter(n => n)
// [1, 2, 3, -3, 4, 4, 5, 6]
arr.filter(Number)
// [1, 2, 3, -3, 4, 4, 5, 6]
arr.filter(Boolean)
// [1, 2, 3, -3, 4, 4, 5, 6]
বা - (কেবলমাত্র "পাঠ্য" টাইপের একক অ্যারে আইটেমের জন্য)
['','1','2',3,,'4',,undefined,,,'5'].join('').split('');
// output: ["1","2","3","4","5"]
বা - ক্লাসিক উপায়: সাধারণ পুনরাবৃত্তি
var arr = [1,2,null, undefined,3,,3,,,0,,,[],,{},,5,,6,,,,],
len = arr.length, i;
for(i = 0; i < len; i++ )
arr[i] && arr.push(arr[i]); // copy non-empty values to the end of the array
arr.splice(0 , len); // cut the array and leave only the non-empty values
arr // [1,2,3,3,[],Object{},5,6]
var arr = [1,2,,3,,3,,,0,,,4,,4,,5,,6,,,,];
arr = $.grep(arr,function(n){ return n == 0 || n });
arr // [1, 2, 3, 3, 0, 4, 4, 5, 6]
var arr = [1,2,null, undefined,3,,3,,,0,,,4,,4,,5,,6,,,,],
temp = [];
for(let i of arr)
i && temp.push(i); // copy each non-empty value to the 'temp' array
arr = temp;
arr // [1, 2, 3, 3, 4, 4, 5, 6]
['foo', '',,,'',,null, ' ', 3, true, [], [1], {}, undefined, ()=>{}].filter(String)
// ["foo", null, " ", 3, true, [1], Object {}, undefined, ()=>{}]
arr = arr.filter(function(n){return n; });
foo.join("").split("")
কেবল স্ট্রিংগুলি একক অক্ষর হলে কাজ করবে বলে মনে হচ্ছে
arr.filter(e=>e)
করতে পারে এবং এটি মানচিত্র, হ্রাস ইত্যাদি দ্বারা শৃঙ্খলাবদ্ধ হতে পারে
আপনার যদি সমস্ত খালি মান ("", নাল, অপরিজ্ঞাত এবং 0) অপসারণ করতে হয়:
arr = arr.filter(function(e){return e});
খালি মান এবং লাইন ব্রেকগুলি সরাতে:
arr = arr.filter(function(e){ return e.replace(/(\r\n|\n|\r)/gm,"")});
উদাহরণ:
arr = ["hello",0,"",null,undefined,1,100," "]
arr.filter(function(e){return e});
ফেরত দিন:
["hello", 1, 100, " "]
আপডেট (অ্যালনিটকের মন্তব্যের ভিত্তিতে)
কিছু পরিস্থিতিতে আপনি অ্যারেতে "0" রাখতে এবং অন্য কোনও কিছু (নাল, অপরিজ্ঞাত এবং "") মুছে ফেলতে চাইতে পারেন, এটি একটি উপায়:
arr.filter(function(e){ return e === 0 || e });
ফেরত দিন:
["hello", 0, 1, 100, " "]
function(e){return !!e}
!!e
এতে NaN (0 টির বিপরীতে) অন্তর্ভুক্ত থাকবে যা কোনটি e
(0 এর মতো নয়)।
var myarr=[1, 2,, 3,, 3,undefined,,"",,0, 4,, 4,, 5,, 6,,,,].filter(Boolean);
, "" এবং 0
কেবল একটি লাইনার:
[1, false, "", undefined, 2].filter(Boolean); // [1, 2]
অথবা ব্যবহার underscorejs.org :
_.filter([1, false, "", undefined, 2], Boolean); // [1, 2]
// or even:
_.compact([1, false, "", undefined, 2]); // [1, 2]
Boolean
একটি ফাংশন হিসাবে কাজ করে ...
Boolean
কোনও ফাংশন হিসাবে বিবেচনা করেন তবে এটি সহজেই ফিরে আসবে true
বা false
তার বদলে মানটি সত্য / মিথ্যা।
(true).constructor === Boolean
,। এবং তারপরে আমাকে বলুন যে আমরা জেএসে অন্য বিল্ড-ইনগুলির সাথে এটি করতে পারি কিনা। ।)) (অবশ্যই অন্যান্য 5 বিল্ড-ইন কনস্ট্রাকটর (স্ট্রিং, অ্যারে, বস্তু, ফাংশন, সংখ্যা)) excluted
যদি আপনি জাভাস্ক্রিপ্ট ১.6 বা তার পরে পেয়েছেন তবে আপনি Array.filter
একটি তুচ্ছ return true
কলব্যাক ফাংশন ব্যবহার করে ব্যবহার করতে পারেন , যেমন:
arr = arr.filter(function() { return true; });
যেহেতু .filter
মূল অ্যারেটিতে অনুপস্থিত উপাদানগুলি স্বয়ংক্রিয়ভাবে এড়িয়ে যায়।
উপরে লিঙ্কিত MDN পৃষ্ঠায় filter
জাভাস্ক্রিপ্ট দোভাষী যারা অফিসিয়াল সংস্করণ সমর্থন করে না তাদের ব্যবহার করা যেতে পারে এর একটি দুর্দান্ত ত্রুটি-পরীক্ষার সংস্করণ রয়েছে ।
দ্রষ্টব্য যে এটি null
কোনও সুস্পষ্ট undefined
মান সহ এন্ট্রিগুলি বা এন্ট্রিগুলিকে সরাবে না , তবে ওপি বিশেষত "অনুপস্থিত" এন্ট্রিগুলির জন্য অনুরোধ করেছে।
undefined
এটির প্রদত্ত মান হিসাবে রয়েছে ।
গর্ত অপসারণ করার জন্য, আপনার ব্যবহার করা উচিত
arr.filter(() => true)
arr.flat(0) // Currently stage 3, check compatibility before using this
গর্ত, এবং, মিথ্যা (নাল, অপরিজ্ঞাত, 0, -0, NaN, "", মিথ্যা, দস্তাবেজ। সমস্ত) মানগুলি মুছে ফেলার জন্য:
arr.filter(x => x)
গর্ত, নাল এবং অপরিশোধিত অপসারণের জন্য:
arr.filter(x => x != null)
arr = [, null, (void 0), 0, -0, NaN, false, '', 42];
console.log(arr.filter(() => true)); // [null, (void 0), 0, -0, NaN, false, '', 42]
console.log(arr.filter(x => x)); // [42]
console.log(arr.filter(x => x != null)); // [0, -0, NaN, false, "", 42]
[, ,]
arr.filter(x => x)
, জেএস এক্স সত্যবাদী বা মিথ্যা কিনা তা পরীক্ষা করবে if (x)
, সুতরাং, কেবলমাত্র সত্যবাদী মান নতুন তালিকায় অর্পণ করা হবে।
এটি করার পরিষ্কার উপায়।
var arr = [0,1,2,"Thomas","false",false,true,null,3,4,undefined,5,"end"];
arr = arr.filter(Boolean);
// [1, 2, "Thomas", "false", true, 3, 4, 5, "end"]
undefined
; এটি মূলত সমস্ত মিথ্যা মানগুলি সরিয়ে দেয়।
ইন্ডসকোর / লোডাশ সহ:
সাধারণ ব্যবহারের ক্ষেত্রে:
_.without(array, emptyVal, otherEmptyVal);
_.without([1, 2, 1, 0, 3, 1, 4], 0, 1);
খালি সহ:
_.without(['foo', 'bar', '', 'baz', '', '', 'foobar'], '');
--> ["foo", "bar", "baz", "foobar"]
বিনা জন্য লোড্যাশ ডকুমেন্টেশন দেখুন ।
লাইব্রেরিটি ব্যবহার করা যদি একটি বিকল্প হয় তবে আমি জানি আন্ডারস্কোর.জেএস এর একটি কমপ্যাক্ট () http://docamentcloud.github.com/underscore/ নামে একটি ফাংশন রয়েছে এটিতে অ্যারে এবং সংগ্রহ সম্পর্কিত আরও কয়েকটি দরকারী কার্যকারিতা রয়েছে।
তাদের ডকুমেন্টেশনের একটি অংশ এখানে দেওয়া হয়েছে:
_.compact (অ্যারে)
সমস্ত মিথ্যা মানগুলি সরানো সহ অ্যারের একটি অনুলিপি ফেরত দেয়। জাভাস্ক্রিপ্টে, মিথ্যা, নাল, 0, "", অপরিজ্ঞাত এবং NaN সমস্ত মিথ্যা।
_কমপ্যাক্ট ([0, 1, ভুয়া, 2, '', 3]);
=> [১, ২, ৩]
@Alnitak
আসলে আপনি যদি অতিরিক্ত কিছু কোড যুক্ত করেন তবে অ্যারে.ফিল্টার সমস্ত ব্রাউজারগুলিতে কাজ করে। নিচে দেখ.
var array = ["","one",0,"",null,0,1,2,4,"two"];
function isempty(x){
if(x!=="")
return true;
}
var res = array.filter(isempty);
document.writeln(res.toJSONString());
// gives: ["one",0,null,0,1,2,4,"two"]
এই আইডির জন্য আপনার কোড যুক্ত করতে হবে তবে ফিল্টার এবং ফাংশনাল প্রোগ্রামিং এর মূল্য ইমো।
//This prototype is provided by the Mozilla foundation and
//is distributed under the MIT license.
//http://www.ibiblio.org/pub/Linux/LICENSES/mit.license
if (!Array.prototype.filter)
{
Array.prototype.filter = function(fun /*, thisp*/)
{
var len = this.length;
if (typeof fun != "function")
throw new TypeError();
var res = new Array();
var thisp = arguments[1];
for (var i = 0; i < len; i++)
{
if (i in this)
{
var val = this[i]; // in case fun mutates this
if (fun.call(thisp, val, i, this))
res.push(val);
}
}
return res;
};
}
let newArr = arr.filter(e => e);
আপনি অ্যারে থেকে লুপ করতে এবং সাজানো আইটেমগুলির মধ্যে একটি নতুন অ্যারে তৈরি করতে চাইলে প্রস্তাবিত লুপ এবং স্প্লাইস করার চেষ্টা করার চেয়ে অ্যারে থেকে দৈর্ঘ্য পরিবর্তন করার পরে এটি তৈরি করা সহজ হতে পারে ওভার সমস্যাগুলির পরিচয় দিতে পারে।
আপনি এরকম কিছু করতে পারেন:
function removeFalsyElementsFromArray(someArray) {
var newArray = [];
for(var index = 0; index < someArray.length; index++) {
if(someArray[index]) {
newArray.push(someArray[index]);
}
}
return newArray;
}
আসলে এখানে আরও জেনেরিক সমাধান:
function removeElementsFromArray(someArray, filter) {
var newArray = [];
for(var index = 0; index < someArray.length; index++) {
if(filter(someArray[index]) == false) {
newArray.push(someArray[index]);
}
}
return newArray;
}
// then provide one or more filter functions that will
// filter out the elements based on some condition:
function isNullOrUndefined(item) {
return (item == null || typeof(item) == "undefined");
}
// then call the function like this:
var myArray = [1,2,,3,,3,,,,,,4,,4,,5,,6,,,,];
var results = removeElementsFromArray(myArray, isNullOrUndefined);
// results == [1,2,3,3,4,4,5,6]
আপনি ধারণাটি পান - আপনার তখন অন্য ধরণের ফিল্টার ফাংশন থাকতে পারে। সম্ভবত আপনার প্রয়োজনের চেয়ে বেশি, তবে আমি উদার বোধ করছিলাম ...;)
খালি উপাদান ছাড়াই অ্যারে পেতে আপনার ফিল্টার ব্যবহার করা উচিত। ES6 এর উদাহরণ
const array = [1, 32, 2, undefined, 3];
const newArray = array.filter(arr => arr);
আমি কেবল উপরের "ES5 এর ডাকতে আমার ভয়েস যোগ করছি Array..filter()
একটি বিশ্বব্যাপী কন্সট্রাকটর সঙ্গে" গলফ-হ্যাক, কিন্তু আমি ব্যবহার করার পরামর্শ দিই Object
পরিবর্তে String
, Boolean
অথবা Number
উপরের হিসাবে সুপারিশ করেছে।
বিশেষত, ইএস 5 এর filter()
ইতিমধ্যে undefined
অ্যারের মধ্যে থাকা উপাদানগুলির জন্য ট্রিগার করে না ; সুতরাং একটি ফাংশন যা সর্বজনীনভাবে ফিরে আসে true
, যা সমস্ত উপাদানকে filter()
হিট দেয়, অগত্যা কেবল অ- undefined
উপাদানগুলি ফেরত দেয় :
> [1,,5,6,772,5,24,5,'abc',function(){},1,5,,3].filter(function(){return true})
[1, 5, 6, 772, 5, 24, 5, 'abc', function (){}, 1, 5, 3]
তবে লেখার ...(function(){return true;})
চেয়ে লেখালেখি দীর্ঘতর ...(Object)
; এবং Object
কনস্ট্রাক্টরের রিটার্ন-মান হ'ল যে কোনও পরিস্থিতিতে , কোনও না কোনও অবজেক্ট। উপরে বর্ণিত আদিম-বক্সিং-নির্মাণকারীগণের বিপরীতে, কোনও সম্ভাব্য অবজেক্ট-মান মিথ্যা নয় এবং এইভাবে বুলিয়ান সেটিংয়ে এটির Object
জন্য স্বল্প হাত function(){return true}
।
> [1,,5,6,772,5,24,5,'abc',function(){},1,5,,3].filter(Object)
[1, 5, 6, 772, 5, 24, 5, 'abc', function (){}, 1, 5, 3]
someArray.filter(String);
সমতুল্য someArray.filter(function(x){ return String(x); });
। আপনি যদি সমস্ত মিথ্যা মানগুলি মুছতে চান someArray.filter(Boolean);
তবে 0, -0, NaN, মিথ্যা, '', নাল এবং অপরিজ্ঞাত অপসারণ করতে কাজ করে।
Object
বিপরীতে কনস্ট্রাক্টরকে কল করার পারফরম্যান্সের ওভারহেড সম্পর্কে অবাক হয়েছি return true
। @ আরবোক্যাট ওপি শূন্য উপাদানগুলিকে অপসারণের জন্য, খালি উপাদানগুলি অপসারণের জন্য বলেছে।
উপরের সর্বোচ্চ ভোট দেওয়া উত্তরটি ব্যবহার করার সময়, উদাহরণস্বরূপ, আমি স্ট্রিং দৈর্ঘ্যের জন্য পৃথক অক্ষর পাচ্ছিলাম 1 এর চেয়ে বেশি।
var stringObject = ["", "some string yay", "", "", "Other string yay"];
stringObject = stringObject.filter(function(n){ return n.length > 0});
অপরিবর্তিত থাকলে ফিরে না আসার পরিবর্তে দৈর্ঘ্য ০ এর চেয়ে বেশি হলে আমরা ফিরে আসি Hope আশা করি সেখানকার কাউকে সাহায্য করবে।
রিটার্নস
["some string yay", "Other string yay"]
["", "some string yay", "", "", 123, "Other string yay"].filter(function(n){ return n.length > 0}) //gives your same result removing 123
সেই ফাংশনটি প্রতিস্থাপন করে। .. স্ট্রিং সহ, বিদ্রূপাত্মকভাবে, সংখ্যাগুলি ছেড়ে দেয় তবে আপনার প্রদত্ত অ্যারেতে একই ফলাফল দেবে।
var data = [null, 1,2,3];
var r = data.filter(function(i){ return i != null; })
console.log(r)
[1,2,3]
ওটা সম্পর্কে কি:
js> [1,2,,3,,3,,,0,,,4,,4,,5,,6,,,,].filter(String).join(',')
1,2,3,3,0,4,4,5,6
join() === join(',')
:)
এটি কাজ করে, আমি এটিকে অ্যাপজেটে পরীক্ষা করেছি (আপনি কোডটি তার আইডিইতে কপি-পেস্ট করতে পারেন এবং এটি কাজ করতে দেখতে "পুনরায় লোড করুন" টিপুন, অ্যাকাউন্ট তৈরি করার দরকার নেই)
/* appjet:version 0.1 */
function Joes_remove(someArray) {
var newArray = [];
var element;
for( element in someArray){
if(someArray[element]!=undefined ) {
newArray.push(someArray[element]);
}
}
return newArray;
}
var myArray2 = [1,2,,3,,3,,,0,,,4,,4,,5,,6,,,,];
print("Original array:", myArray2);
print("Clenased array:", Joes_remove(myArray2) );
/*
Returns: [1,2,3,3,0,4,4,5,6]
*/
for ... in
আসলে অনুপস্থিত উপাদানগুলির এড়িয়ে যাওয়ার কারণ হয়ে দাঁড়ায়। undefined
কেবলমাত্র পরীক্ষাটি সেই প্রকৃত উপাদানগুলি সরিয়ে দেয় যা স্পষ্টভাবে সেই মানটিতে সেট করা থাকে।
এটি করার আরেকটি উপায় হ'ল অ্যারের দৈর্ঘ্যের সম্পত্তিটি গ্রহণ করা: অ্যারের 'বামে' নন-নাল আইটেমগুলি প্যাক করুন, তারপরে দৈর্ঘ্য হ্রাস করুন। এটি একটি স্থানের অ্যালগরিদম - মেমরি বরাদ্দ না করে, আবর্জনা সংগ্রাহকের পক্ষে খুব খারাপ, এবং এটির খুব ভাল / গড় / সবচেয়ে খারাপ ক্ষেত্রে আচরণ রয়েছে।
এই সমাধানটি এখানে অন্যদের তুলনায়, ক্রোমে 2 থেকে 50 গুণ দ্রুত এবং ফায়ারফক্সে 5 থেকে 50 গুণ দ্রুততর, আপনি এখানে দেখতে পাচ্ছেন: http://jsperf.com/remove-null-items-from-array
নীচের কোডটি অ্যারেতে অ-গণনাযোগ্য 'সরাননুল' পদ্ধতি যুক্ত করে, যা ডেইজি-শৃঙ্খলার জন্য 'এই' ফিরিয়ে দেয়:
var removeNull = function() {
var nullCount = 0 ;
var length = this.length ;
for (var i=0, len=this.length; i<len; i++) { if (!this[i]) {nullCount++} }
// no item is null
if (!nullCount) { return this}
// all items are null
if (nullCount == length) { this.length = 0; return this }
// mix of null // non-null
var idest=0, isrc=length-1;
length -= nullCount ;
while (true) {
// find a non null (source) slot on the right
while (!this[isrc]) { isrc--; nullCount--; }
if (!nullCount) { break } // break if found all null
// find one null slot on the left (destination)
while ( this[idest]) { idest++ }
// perform copy
this[idest]=this[isrc];
if (!(--nullCount)) {break}
idest++; isrc --;
}
this.length=length;
return this;
};
Object.defineProperty(Array.prototype, 'removeNull',
{ value : removeNull, writable : true, configurable : true } ) ;
arr.filter(e => e)
।
(অবজেক্ট-সদস্য) লুপের জন্য 'অপব্যবহার'। => লুপের শরীরে কেবল সত্যবাদী মানগুলি উপস্থিত হয়।
// --- Example ----------
var field = [];
field[0] = 'One';
field[1] = 1;
field[3] = true;
field[5] = 43.68;
field[7] = 'theLastElement';
// --- Example ----------
var originalLength;
// Store the length of the array.
originalLength = field.length;
for (var i in field) {
// Attach the truthy values upon the end of the array.
field.push(field[i]);
}
// Delete the original range within the array so that
// only the new elements are preserved.
field.splice(0, originalLength);
for ... in
কি অ্যারে থেকে অনির্ধারিত কী সরিয়ে ফেলা হবে, কিন্তু আপনি আসলে কোন কোড এখানে করেছি অন্যথায় কেবল "truthy" মান গ্রহণ করতে
এটি আপনাকে সাহায্য করতে পারে: https://lodash.com/docs/4.17.4# সরানো
var details = [
{
reference: 'ref-1',
description: 'desc-1',
price: 1
}, {
reference: '',
description: '',
price: ''
}, {
reference: 'ref-2',
description: 'desc-2',
price: 200
}, {
reference: 'ref-3',
description: 'desc-3',
price: 3
}, {
reference: '',
description: '',
price: ''
}
];
scope.removeEmptyDetails(details);
expect(details.length).toEqual(3);
scope.removeEmptyDetails = function(details){
_.remove(details, function(detail){
return (_.isEmpty(detail.reference) && _.isEmpty(detail.description) && _.isEmpty(detail.price));
});
};
var data= {
myAction: function(array){
return array.filter(function(el){
return (el !== (undefined || null || ''));
}).join(" ");
}
};
var string = data.myAction(["I", "am","", "working", "", "on","", "nodejs", "" ]);
console.log(string);
আউটপুট:
আমি নোডেজে কাজ করছি
এটি অ্যারে থেকে খালি উপাদানটি সরিয়ে অন্য উপাদান প্রদর্শন করবে।
যদি কোনও অ্যারেতে অন্যান্য খালি উপাদানগুলির পাশাপাশি খালি অবজেক্টস, অ্যারে এবং স্ট্রিংস থাকে তবে আমরা এগুলি এটিকে সরাতে পারি:
const arr = [ [], ['not', 'empty'], {}, { key: 'value' }, 0, 1, null, 2, "", "here", " ", 3, undefined, 3, , , , , , 4, , 4, , 5, , 6, , , ]
let filtered = JSON.stringify(
arr.filter((obj) => {
return ![null, undefined, ''].includes(obj)
}).filter((el) => {
return typeof el != "object" || Object.keys(el).length > 0
})
)
console.log(JSON.parse(filtered))
ES6 সহ:
const arr = [0, 1, null, 2, "", 3, undefined, 3, , , , , , 4, , 4, , 5, , 6, , , ,]
let filtered = arr.filter((obj) => { return ![null, undefined].includes(obj) })
console.log(filtered)
সরল জাভাস্ক্রিপ্ট সহ ->
var arr = [0, 1, null, 2, "", 3, undefined, 3, , , , , , 4, , 4, , 5, , 6, , , ,]
var filtered = arr.filter(function (obj) { return ![null, undefined].includes(obj) })
console.log(filtered)
একটি নিয়মিত অভিব্যক্তি দিয়ে অবৈধ এন্ট্রি ফিল্টারিং
array = array.filter(/\w/);
filter + regexp
খালি উপাদানগুলি অপসারণ করার সর্বোত্তম উপায় হ'ল ব্যবহার করা Array.prototype.filter()
, যেমন ইতিমধ্যে অন্যান্য উত্তরে উল্লিখিত হয়েছে।
দুর্ভাগ্যক্রমে, Array.prototype.filter()
আই <9 দ্বারা সমর্থিত নয়। আপনি যদি এখনও আইই 8 বা আইই এর আরও পুরানো সংস্করণ সমর্থন করতে চান তবে আপনি এই ব্রাউজারগুলিতে সমর্থন যোগ করতে নিম্নলিখিত পলফিলটি ব্যবহার করতে পারেন Array.prototype.filter()
:
if (!Array.prototype.filter) {
Array.prototype.filter = function(fun/*, thisArg*/) {
'use strict';
if (this === void 0 || this === null) {
throw new TypeError();
}
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun !== 'function') {
throw new TypeError();
}
var res = [];
var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
for (var i = 0; i < len; i++) {
if (i in t) {
var val = t[i];
if (fun.call(thisArg, val, i, t)) {
res.push(val);
}
}
}
return res;
};
}
var a = [,,]
এবংvar a = [undefined, undefined]
। পূর্ববর্তীটি সত্যই শূন্য, তবে পরবর্তীটির কাছে দুটি কী রয়েছে তবেundefined
মান সহ।