我想檢查一堆變數的假值。
而不是寫一個很長的 if 陳述句,例如:
if (!userData.email || !userData.lastName || ! userData.firstName etc...
我想將這些值放在一個陣列中并簡單地檢查陣列,例如:
var detailsConditionsArr = [
userData.firstName,
userData.lastName,
userData.email,
userData.phone,
userData.address,
userData.mailAddress,
]
if (detailsConditionsArr.indexOf(false) === 1) {
console.log("Found a falsy");
}
但以上不起作用(如果陳述句永遠不會觸發)。
值可以是false,null或''。
有沒有辦法從陣列中檢查這些?
uj5u.com熱心網友回復:
Array#some 的理想用例
在迭代中檢查falsy值,如果測驗成功,true將回傳。
var A = ["Name", ""];
var B = ["Name", "30"];
var C = ["Name", "30", null];
if (A.some(el => !el)) {
console.log("Found a falsy in A");
}
if (B.some(el => !el)) {
console.log("Found a falsy in B");
}
if (C.some(el => !el)) {
console.log("Found a falsy in C");
}
uj5u.com熱心網友回復:
您可以使用要檢查的鍵名作為陣列,然后像這樣進行檢查:
const userData = { email: '', lastName: '', firstName: '' };
const hasFalsy = ['email', 'lastName', 'firstName'].some(k => !Boolean(userData[k]));
if (hasFalsy) {
console.log('found a falsy');
}
uj5u.com熱心網友回復:
您可以使用 reduce 從陣列中回傳單個值,如下所示:
var detailsConditionsArr = [
userData.firstName,
userData.lastName,
userData.email,
userData.phone,
userData.address,
userData.mailAddress,
]
if (detailsConditionsArr.reduce((carry, el)=> el ? carry : true, false)) {
console.log("Found a falsy");
}
uj5u.com熱心網友回復:
您可以回圈屬性串列,然后檢查是否有任何錯誤:
const userData = {
firstName : 'John',
lastName : 'Doe',
email : null,
phone : 42,
address : 'Hello',
mailAddress : 'world'
};
function HasObjectAnyFalsyValues(obj)
{
for (let prop in obj)
{
if (Object.prototype.hasOwnProperty.call(obj, prop)
&& !obj[prop]) { // <-- check for falsy
return true;
}
}
return false;
}
console.log('The object has ' (!HasObjectAnyFalsyValues(userData) ? 'no ' : '') 'falsy values');
這將檢查所有屬性。如果您想列出特定的屬性,請使用發布的其他答案之一
uj5u.com熱心網友回復:
您可以使用some方法。
var detailsConditionsArr = [
"test",
12,
false,
"s",
"sd",
"test",
]
if (detailsConditionsArr.some(x => !x)) {
console.log("Found a falsy");
}
// or
//if (detailsConditionsArr.some(x => !Boolean(x))) {
// console.log("Found a falsy");
//}
uj5u.com熱心網友回復:
使用some是完成這項作業的一種干凈的方式。
該Array.prototype.some()方法測驗陣列中是否至少有一個元素通過了由提供的函式實作的測驗(在您的情況下,為假值)。
const userData = {};
userData.firstName = "dd";
userData.lastName = false;
userData.email = 0;
userData.phone = 123;
userData.address = "aad";
userData.mailAddress = "dff";
const detailsConditionsArr = [
userData.firstName,
userData.lastName,
userData.email,
userData.phone,
userData.address,
userData.mailAddress,
]
const detailsConditionsArr2 = [true, 1, "fff"];
const doesHaveFalsy = obj => obj.some(x => !x);
if (doesHaveFalsy(detailsConditionsArr)) {
console.log("detailsConditionsArr Found a falsy");
}
if (doesHaveFalsy(detailsConditionsArr2)) {
console.log("detailsConditionsArr2 Found a falsy");
}
更多關于一些 - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/329121.html
標籤:javascript 查询
