У меня есть массив вроде:
["", "", "", "1", "", ""]
Я хочу предупредить, когда все значения массива равны blanks, т. е. когда массив выглядит так:
["", "", "", "", "", ""]
Как я могу этого добиться.
Как это дубликат @Faisal?
Я думаю, что описание больше подходит для описания наблюдаемых массивов.
Но это не дубликат @Faizal.
Эээ ... вышеизложенное не нужно ничего наблюдать @Faisal



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Используйте every():
const allEmpty = arr => arr.every(e => e === "");
console.info(allEmpty(["", "", "", "1", "", ""]));
console.info(allEmpty(["", "", "", "", "", ""]));Просто из любопытства: в данном случае лучше использовать == или ===, или это вообще не имеет значения?
Упс, я пропустил это, @Terry. Спасибо! Лучше использовать ===, потому что если элемент массива 0, то он будет удален (потому что 0 == ""). Попробуйте - это верно! (Странно, я знаю, но они оба оцениваются как false)
Попробуй это,
["", "", "", "", "", ""].join("").length==0
Если вы хотите удалить пробелы,
["", "", "", "", "", ""].join("").replace(/\s/gi,'').length==0
Примечание :
Это не будет работать для таких входов, как ["", [], "", null, undefined, ""]
Вы также можете trim(), если в массиве есть пробелы :)
array.join("").replace(/\s/gi,'').length==0 будет улучшенная версия этого ответа.
Я не хочу обрезать, потому что эти пустые значения я должен использовать
Надеюсь, он не беспокоился о пробелах, все равно обновил ответ. @ВикашСингх
Обратите внимание, что это вернет true для ввода, например: ["", [], "", null, undefined, ""]. Если вы строго следите за тем, чтобы все элементы были пустыми строками "", то это не будет хорошо.
Согласитесь, @Shidersz, но его вопрос о пустых строках, его требования ясны. Мой ответ - решить его проблему. Обновлю ответ, чтобы он мог кому-то помочь.
@SrinivasanSekar Да, я никогда не говорил, что твой ответ неправильный, поэтому я отметил свой комментарий как note. Просто чтобы предупредить ОП о ситуации.
Хорошо, я посмотрю на это. и как только это сработает, я приму ответ
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");
}
}
[].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А вот про представление:
.some(Boolean) ~40 млн операций/с (операций в секунду)isArrayEmpty() ~36 млн операций/с (~ на 10% медленнее).filter(Boolean).length ~9 млн операций/с (~75% медленнее).join('')!='' ~4 млн операций/с (~90% медленнее)Примечание (1): Использование Стрелочные функции(a)=>a вместо логического значения сделает производительность еще ниже, в этих случаях примерно на 5% медленнее.
Заметка 2): Ожидаемый результат такой же, как только мы уверены, что все элементы массива являются Нить. Что касается других элементов ложный s (null или false ...), вариант № 3 (присоединиться) не будет работать.
Возможный дубликат Как следить за изменениями массива?