Je voudrais supprimer toutes les valeurs fausses d'un tableau. Les valeurs fausses en JavaScript sont false, null, 0, "", indéfini et NaN.
function bouncer(arr) {
arr = arr.filter(function (n) {
return (n !== undefined && n !== null && n !== false && n !== 0 && n !== "" && isNaN()!=NaN); });
return arr;
}
bouncer([7, "ate", "", false, 9, NaN], "");
Ce qui précède est satisfait pour tous sauf le cas de test NaN. Quelqu'un peut-il m'aider à vérifier dans le tableau s'il contient ou non NaN?
Vous pouvez utiliser Boolean:
var myFilterArray = myArray.filter(Boolean);
Puisque vous voulez vous débarrasser des valeurs "fausses", laissez simplement JavaScript faire son travail:
function bouncer(arr) {
return arr.filter(function(v) { return !!v; });
}
La double application de l'opérateur !
fera en sorte que le rappel de filtre renvoie true
lorsque la valeur est "vérité" et false
lorsqu'il est "falsy".
(Votre code appelle isNaN()
mais ne lui transmet pas de valeur; c'est pourquoi ce test n'a pas fonctionné. La fonction isNaN()
renvoie true
si son paramètre, lorsqu'il est contraint de passer à un nombre, est NaN
et false
sinon.)
edit - notez que
function bouncer(arr) {
return arr.filter(Boolean);
}
loremIpsum le notera également dans une autre réponse, car le constructeur booléen intégré fait à peu près exactement la même chose que !!
.
truthyArray = arr.filter(el => el)
^ c'est comme ça que vous le faites
Vous utilisez isNaN()
de manière incorrecte. Ce devrait être quelque chose comme suit:
function bouncer(arr) {
return arr.filter(function (n) {
return n !== undefined && n !== null && n !== false && n !== 0 && n !== "" && !isNaN(n);
});
}
Aussi, vous pouvez le réécrire:
function bouncer( arr ){
return arr.filter( function( value ){
return value;
});
}
Je sais que cela peut être fait en utilisant la méthode arr.filter (). Mais je préfère utiliser la fonction Boolean (). Est plus clair pour moi. Voici comment je l'ai fait, bien qu'un peu plus longtemps:
function bouncer(arr) {
// Don't show a false ID to this bouncer.
var falsy;
var trueArr = [];
for (i = 0; i < arr.length; i++) {
falsy = Boolean(arr[i]);
if (falsy === true) {
trueArr.Push(arr[i]);
}
}
return trueArr;
}
bouncer([7, "ate", "", false, 9]);
// returns a new array that is filtered accordingly.
Ceci est une autre solution équivalente mais illustrative:
function bouncer( arr ){
return arr.filter( function( value ){
return value ? true : false;
});
}
Cet exemple de code est illustratif car il indique au lecteur que la variable value
sera évaluée en tant que vérité ou falsey et que la fonction anonyme renverra un booléen, true
ou false
, mappant à l'évaluation de value
.
Pour ceux qui ne sont pas familiers avec cette approche consistant à supprimer des valeurs d'un tableau basé sur leur véracité, ou pour ceux qui ne connaissent pas (ou n'ont pas lu la documentation sur) la fonction filter
, cet exemple est le plus concis qui soit encore transmis. le comportement de la fonction filter
.
Bien entendu, dans votre application, vous pouvez opter pour la mise en œuvre plus concise, mais moins perspicace:
function bouncer( arr ){
return arr.filter( function( value ){
return value;
});
}
fonction videur:
function bouncer(arr) {
return arr.filter((val) => {
return !!val;
});
}
console.log(bouncer([7, "ate", "", false, 9]));
Je pense une meilleure affaire de cette façon
function bouncer(arr) {
arr = arr.filter(function(item) {
return item;
return arr;
bouncer([7, "ate", "", false, 9, NaN, undefined, 0]);
Merci pour toutes les réponses de travail ci-dessus. Voici 3 approches pour résoudre le problème. Troisième solution au problème par votre approche @Vignesh.
1.
function bouncer(arr) {
return arr.filter( function( val ){
return val;
});
}
2.
function bouncer(arr) {
return arr.filter(Boolean);
}
3.
function bouncer(arr) {
return arr.filter(function(val){
return val !== false && val !== "" && !(Number.isNaN(val)) && val !==
undefined && val !== 0 && val !== null;
});
}
C'est mon idée ...
function bouncer(arr) {
// Don't show a false ID to this bouncer.
var result = [];
function isGood(obj){
if(!Boolean(obj)){
return false;
} else {
return true;
}
}
for (var i=0; i < arr.length; i++){
if (isGood(arr[i]) === true){
result.Push(arr[i]);
}
}
return result;
}
console.log(bouncer([7, "ate", "", false, 9]));
En utilisant un filtre, nous pouvons écrire
function bouncer(arr) {
return arr.filter(item => item);
}
bouncer([false, null, 0, NaN, undefined, ""]) // will return [].
lodash peut faire l'affaire, il existe une fonction _.compact ().
const arr = [7, "ate", "", false, 9, NaN];
console.log(_.compact(arr));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
function bouncer(arr) {
var result = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i]) {
result.Push(arr[i]);
}
}
return result;
}
bouncer([7, "ate", "", false, 9]);
function falsy(value) {
if (value) {
return value;
}
}
function bouncer(arr) {
var filter = arr.filter(falsy);
return filter;
}
bouncer([7, "ate", "", false, 9]);
Cela devrait être ce que vous recherchez:
let array = [7, 'ate', '', false, 9, NaN];
function removeFalsyItems(array) {
// Your result
let filter = array.filter(Boolean);
// Empty the array
array.splice(0, array.length);
// Push all items from the result to our array
Array.prototype.Push.apply(array, filter);
return array
}
removeFalsyItems(array) // => [7, 'ate', 9], funny joke btw...
Essayez d’utiliser un filtre et un booléen:
let array = [7,"ate","",false,9];
array.filter((values) => {return Boolean(values) === true })
function bouncer(arr) {
function filterFalse(value) {
var a = Boolean(value);
if (a === true) {
return a;
}
return a;
}
function filterArray(x) {
var y = filterFalse(x);
if (y) {
return true;
} else {
return false;
}
}
var newArr = arr.filter(filterArray);
return newArr;
}
bouncer([1, null, NaN, 2, undefined]);
function removeFalsy(value){
var val = Boolean(value);
if(!val)
return false;
return true;
}
function bouncer(arr) {
return arr.filter(removeFalsy);
}
bouncer([7, "ate", "", false, 9]);