Как проверить, все ли значения массива пусты в Javascript

У меня есть массив вроде:

["", "", "", "1", "", ""]

Я хочу предупредить, когда все значения массива равны blanks, т. е. когда массив выглядит так:

["", "", "", "", "", ""]

Как я могу этого добиться.

Возможный дубликат Как следить за изменениями массива?

Faisal Rahman Avash 27.05.2019 06:36

Как это дубликат @Faisal?

Jack Bashford 27.05.2019 06:36

Я думаю, что описание больше подходит для описания наблюдаемых массивов.

Faisal Rahman Avash 27.05.2019 06:38

Но это не дубликат @Faizal.

Jaydeep Mor 27.05.2019 06:39

Эээ ... вышеизложенное не нужно ничего наблюдать @Faisal

Jack Bashford 27.05.2019 06:51
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
9
5
2 700
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

Используйте every():

const allEmpty = arr => arr.every(e => e === "");
console.info(allEmpty(["", "", "", "1", "", ""]));
console.info(allEmpty(["", "", "", "", "", ""]));

Просто из любопытства: в данном случае лучше использовать == или ===, или это вообще не имеет значения?

Terry 27.05.2019 08:01

Упс, я пропустил это, @Terry. Спасибо! Лучше использовать ===, потому что если элемент массива 0, то он будет удален (потому что 0 == ""). Попробуйте - это верно! (Странно, я знаю, но они оба оцениваются как false)

Jack Bashford 27.05.2019 08:03

Попробуй это,

["", "", "", "", "", ""].join("").length==0

Если вы хотите удалить пробелы,

["", "", "", "", "", ""].join("").replace(/\s/gi,'').length==0

Примечание :

Это не будет работать для таких входов, как ["", [], "", null, undefined, ""]

Вы также можете trim(), если в массиве есть пробелы :)

Eddie 27.05.2019 06:35
array.join("").replace(/\s/gi,'').length==0 будет улучшенная версия этого ответа.
Vikash_Singh 27.05.2019 06:42

Я не хочу обрезать, потому что эти пустые значения я должен использовать

Atal Shrivastava 27.05.2019 06:50

Надеюсь, он не беспокоился о пробелах, все равно обновил ответ. @ВикашСингх

Srinivasan Sekar 27.05.2019 06:51

Обратите внимание, что это вернет true для ввода, например: ["", [], "", null, undefined, ""]. Если вы строго следите за тем, чтобы все элементы были пустыми строками "", то это не будет хорошо.

Shidersz 27.05.2019 06:56

Согласитесь, @Shidersz, но его вопрос о пустых строках, его требования ясны. Мой ответ - решить его проблему. Обновлю ответ, чтобы он мог кому-то помочь.

Srinivasan Sekar 27.05.2019 07:01

@SrinivasanSekar Да, я никогда не говорил, что твой ответ неправильный, поэтому я отметил свой комментарий как note. Просто чтобы предупредить ОП о ситуации.

Shidersz 27.05.2019 07:07

Хорошо, я посмотрю на это. и как только это сработает, я приму ответ

Atal Shrivastava 27.05.2019 07:24

const isEmpty=arr=>{
  return arr.filter(it=>it.length>0).length ==0
}

arr1 = ["",""]
arr2 = ["1",""]

console.info(isEmpty(arr1))
console.info(isEmpty(arr2))
var arr1 = ["", "", "", "1", "", ""];
var arr2 = ["", "", "", "", "", ""];

function checkArrValEmpty(arr) {
  let count = 0;
  for(let i = 0; i < arr.length; i++) {
    if (arr[i].trim().length === 0) {`enter code here`
      count++;
    }
  }
  return count === arr.length
}

console.info(checkArrValEmpty(arr2));
console.info(checkArrValEmpty(arr1));
Ответ принят как подходящий

Вы всегда можете использовать базовый цикл for в качестве решения вашей проблемы:

function allBlanks(arr)
{
    for (var i = 0; i < arr.length; i++)
    {
        if (arr[i] !== "") return false;
    }

    return true;
}

console.info(allBlanks(["", "", "", "1", "", ""]));
console.info(allBlanks(["", "", "", "", "", ""]));
console.info(allBlanks(["", [], "", null, undefined, ""]));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

Вот также более общий подход, который compact удаляет из массива все falsey значения, а затем проверяет оставшуюся длину:

let compact = a => a.reduce((r,c) => (!!c ? r.push(c) : null, r),[])

let isEmpty = array => compact(array).length == 0

console.info(isEmpty(["", false, 0, "", null, undefined])) // true
console.info(isEmpty(["", 1]))   // false
console.info(isEmpty(["", []]))  // false
console.info(isEmpty(["", {}]))  // false

Но если это единственный вариант использования, который вас интересует, вы также можете использовать Массив.некоторые:

let isEmpty = a => !a.some(x => x !== '')

// OR let isEmpty = a => !a.some(x => x.toString().length > 0)

console.info(isEmpty(["", "", "", "", "", ""]))
console.info(isEmpty(["", "", "1", "", "", ""]))

Вы также можете использовать Массив.уменьшить:

let isEmpty = a => !a.reduce((r,c) => `${r}${c}`).length

console.info(isEmpty(["", "", "", "", "", ""]))
console.info(isEmpty(["", "", "1", "", "", ""]))

Массив.фильтр:

let isEmpty = a => !a.filter(x => x.toString().length).length

console.info(isEmpty(["", "", "", "", "", ""]))
console.info(isEmpty(["", "", "1", "", "", ""]))

Однако это будет действительной проверкой вашего текущего ввода. Не против случаев с массивами, объектными литералами и т. д. как часть вашего входного массива.


Если вы используете lodash, это может быть (через _.every и _.isEmpty):

let isArrayEmpty = a => _.every(a, _.isEmpty)

console.info(isArrayEmpty(["", "", "", "", "", ""]))
console.info(isArrayEmpty(["", "", "1", "", "", ""]))
<script src = "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

или также через _.compact, который также удаляет ложные значения:

let isArrayEmpty = a => !_.compact(a).length

console.info(isArrayEmpty(["", "", "", "", "", ""]))
console.info(isArrayEmpty(["", "", "1", "", "", ""]))
<script src = "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

function isEmpty (arr){
  return arr.every(e => e === "")
};
let a = ["", "", "", "1", "", ""];
let b = ["", "", "", "", "", ""] 
console.info(isEmpty(a));
console.info(isEmpty(b));

Я реализовал небольшую функцию для проверки пустого массива, которая будет работать во всех браузерах.

var list=["1", [], "", null, undefined, ""];
var listE=["", "", "","", "", "", ""];
var listE1=["", [], "", null, undefined, ""];

function isArrayEmpty(arr){
return arr.toString().replace(/,/g, '')= = "";
}

alert(isArrayEmpty(list))
alert(isArrayEmpty(listE))
alert(isArrayEmpty(listE1))

1) Сохранить размер массива как длину
2) Найти нет. пустых значений в массиве и сохранить их, скажем, в переменной (EmptyValues)
3) Проверьте, если (EmptyValue== длина) {Gate Alert все, что вы хотите}

function checkBlankvalues(arr){
var emptyValues=0,length=arr.length;
//for finding empty vales in array till now
for(var i=0;i<arr.length;i++)
{ 
   if (arr[i] = "")
   {
     emptyValues++;
   }
}
if (length==emptyValue)
{
 //alert("array is blank");
}
}
TL;DR (самый быстрый и простой)
[].some(Boolean)  //  Empty : false   |   Not Empty : true
Объяснение

Сочетание нативных функций Boolean с .some() или .filter() или с использованием .join() может вернуть ожидаемый результат:

var a=['','','','',''],   // Empty
    b=['','','x','',''];  // Not Empty

// Is Not Empty?

// #1
console.info( a.some(Boolean) ); // false
console.info( b.some(Boolean) ); // true

// #2
console.info( a.filter(Boolean).length ); // = 0
console.info( b.filter(Boolean).length ); // != 0

// #3
console.info( a.join('')!='' ); // false
console.info( b.join('')!='' ); // true

Также определяемая пользователем функция:

var a=['','','','',''],   // Empty
    b=['','','x','',''];  // Not Empty
        
function isArrayEmpty(a) { 
  for (var i = 0; i < a.length; i++) 
    if (a[i]) return false;
  return true;
}

console.info( isArrayEmpty(a) ); // true
console.info( isArrayEmpty(b) ); // false

А вот про представление:

  1. .some(Boolean) ~40 млн операций/с (операций в секунду)
  2. isArrayEmpty() ~36 млн операций/с (~ на 10% медленнее)
  3. .filter(Boolean).length ~9 млн операций/с (~75% медленнее)
  4. .join('')!='' ~4 млн операций/с (~90% медленнее)

Примечание (1): Использование Стрелочные функции(a)=>a вместо логического значения сделает производительность еще ниже, в этих случаях примерно на 5% медленнее.

Заметка 2): Ожидаемый результат такой же, как только мы уверены, что все элементы массива являются Нить. Что касается других элементов ложный s (null или false ...), вариант № 3 (присоединиться) не будет работать.

Другие вопросы по теме