Mam przedmiot, który może wyglądać tak:
{
address: {
street: undefined,
country: 'GB'
},
givenname: 'Marko',
surname: null,
}
Chcę wiedzieć, czy wszystkie pola są ustawione lub przynajmniej jeden jest null. Czy jest mądrzejszy / krótszy sposób, aby dotrzeć do JavaScript niż
address.street != null && address.country != null && givenname != null && surname != null
Może coś, co wygląda tak:
// this could return true or false?
nullCheck(address.street, address.country, givenname, surname)
4 odpowiedzi
Pierwszy jest typowy sposób, aby rzeczywiście iść. Działa świetnie specjalnie, jeśli masz dokładki, jak z maszynopisem.
Drugi jest taki sam, ale z odrobiną nad głową (za każdym razem, gdy wejdziesz / wyjść z funkcji, reklamy odrobiną nad głową), chociaż jest naprawdę niewielki, tylko zauważalny, gdy masz tony iteracji. Możesz dynamicznie wykryć argumenty:
const nullobj = {
value1: "yay",
value2: "",
value3: 23,
value4: null
};
const obj = {
value1: "yay",
value2: "",
value3: 23,
value4: "ok"
};
function checkArgumentsNull(...args) {
for (let v of args) {
if (v == null) {
return true;
}
}
return false;
}
console.log("nullobj:", checkArgumentsNull(nullobj.value1, nullobj.value2, nullobj.value3, nullobj.value4));
console.log("obj:", checkArgumentsNull(obj.value1, obj.value2, obj.value3, obj.value4));
Ale jeśli zamierzasz dynamicznie sprawdzać argumenty, możesz sprawdzić dynamicznie dla właściwości, co jest łatwiejsze. Wystarczy zobaczyć edycję , a ten można łatwo przekonwertować na rekurencyjny , który będzie używany dla pod-obiektów . Właściwie wszystkie funkcje można je przekształcić w rekurencyjne po tej zasadzie:
const nullobj = {
value1: {
ok: "ok",
notok: null
},
value2: "",
value3: 23,
value4: "ok"
};
const obj = {
value1: {
ok: "ok",
notok: "no"
},
value2: "",
value3: 23,
value4: "ok"
};
function checkPropertiesNull(obj) {
for (let v in obj) {
if (obj[v] == null || (typeof obj[v] === "object" && checkPropertiesNull(obj[v]))) {
return true;
}
}
return false;
}
console.log("nullobj:", checkPropertiesNull(nullobj));
console.log("obj:", checkPropertiesNull(obj));
A ze względu na nowoczesny JavaScript możesz nawet przekazać iterator i możesz sprawdzić dowolne obiekt, który możesz sobie wyobrazić (obiekt, tablice, mapy, zestawy itp.):
const nullobj = {
value1: "yay",
value2: "",
value3: 23,
value4: null
};
const obj = {
value1: "yay",
value2: "",
value3: 23,
value4: "ok"
};
const nullarr = ["ok", "yay", null];
const arr = ["ok", "yay", "yay2"];
function checkIteratorNull(it) {
for (let v of it) {
if (v == null) {
return true;
}
}
return false;
}
console.log("nullobj:", checkIteratorNull(Object.values(nullobj)));
console.log("obj:", checkIteratorNull(Object.values(obj)));
console.log("nullarr:", checkIteratorNull(nullarr));
console.log("arr:", checkIteratorNull(arr));
Tak jest. Możesz użyć typu danych obiekt , a obejmuje metodę tablicy tak:
Object.values(your_object).includes(null)
Spowoduje to powróci true , jeśli obiekt zawiera co najmniej jeden NULL i false , jeśli nie zawiera żadnych .
Ta odpowiedź działa tylko dla obiektów głębokich poziomów 1 poziom.
Dokumentacja obiektu. Array.inCluduje dokumentację
Możesz użyć Metoda every
, biorąc pod uwagę listę zmiennych do sprawdzenia , z wywołaniem zwrotnym, który sprawdza NULL.
let address = {
street: undefined,
country: 'GB'
},
givenname = 'Marko',
surname = null;
console.log([address.street, address.country, givenname, surname].every(e => e !== null))
surname = "blah"
console.log([address.street, address.country, givenname, surname].every(e => e !== null))
Możesz użyć .some
const hasAnEmptyValue = (obj) => Object.values(obj).some(value => !value)
const obj1 = {
address: null,
givenname: 'Rick',
surname: 'Sanchez',
}
const obj2 = {
address: 'Argentina',
givenname: 'Rick',
surname: 'Sanchez',
}
console.log(hasAnEmptyValue(obj1))
console.log(hasAnEmptyValue(obj2))