我想要對 -statement 進行代碼優化,if因為否則我必須在這個條件中添加更多的鍵值對&&。我有一個物件陣列和條件,如下面的代碼示例。
let arr = [{
a: 12,
b: 14,
c: undefined,
d: undefined,
e: 56,
f: "file 1",
g: "file 2",
h: undefined,
}];
for (const item of arr) {
if (
item.a !== undefined &&
item.b !== undefined &&
item.c !== undefined &&
item.d !== undefined &&
item.e !== undefined &&
item.f !== undefined &&
item.g !== undefined
) {
console.log("code works");
} else {
console.log("fails");
}
}
我正在嘗試優化上面的代碼,我很感激任何建議。
uj5u.com熱心網友回復:
我理解 Q. 的方式是 OP 不想檢查每個物件的值不是undefined值,并且 OP 更想檢查是否需要存在某些預定義的屬性(例如,通過鍵串列),也不需要等于undefined。
在這種情況下,可以實作一個功能,該功能通過每個傳遞的專案/物件的屬性名稱串列(鍵串列)檢查此類物件是否滿足上述要求。
這樣的函式可以作為回呼函式傳遞給以every檢測陣列的任何專案/物件是否滿足要求。
function isEveryPropertyFromBoundListDefined(item) {
const keyList = this; // the bound list of defined keys.
return keyList
.every(key => item[key] !== undefined);
}
const sampleData_1 = [{
a: 12, b: 14, c: undefined, d: undefined,
e: 56, f: "file 1", g: "file 2", h: undefined,
}];
const sampleData_2 = [{
e: 56, f: "file 1", g: "file 2", h: null,
}, {
h: 1, g: 2, f: 3, e: 4,
}];
const listOfToBeDefinedKeys = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'];
console.log(
sampleData_1
// make use of `every`'s 2nd `thisArg` parameter.
.every(isEveryPropertyFromBoundListDefined, listOfToBeDefinedKeys)
);
console.log(
sampleData_2
// make use of `every`'s 2nd `thisArg` parameter.
.every(isEveryPropertyFromBoundListDefined, ['e', 'f', 'g', 'h'])
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
uj5u.com熱心網友回復:
您可以使用Object.values()andsome()來撰寫更短的代碼。這不是一個巨大的優化
let arr = [{
a:12,
b:14,
c:undefined,
d:undefined,
e:56,
f:"file 1",
g:"file 2",
h:undefined
}]
for(let key of arr){
if(Object.values(key).some((x) => x===undefined)){
console.log("fails")
}else{
console.log("code works")
}
}
uj5u.com熱心網友回復:
創建一個接受物件作為引數的函式,獲取它的values,然后用于some檢查是否有任何值是undefined。some找到條件的第一個匹配項后回傳。
const arr=[{a:12,b:14,c:undefined,d:undefined,e:56,f:'file 1',g:'file 2',h:undefined},{a:12,b:14,c:3,d:'bob from accounting',e:56,f:'file 1',g:'file 2',h:23},{a:12,b:14,c:3,d:'bob from accounting',e:56,f:'file 1',g:'file 2',h:undefined}];
function test(obj) {
const values = Object.values(obj);
return values.some(p => p === undefined);
}
const out = arr.map((obj, i) => {
return `Code ${test(arr[i]) ? 'fails' : 'works'}`;
});
console.log(out);
uj5u.com熱心網友回復:
如果我正確理解要求,您在物件中有動態屬性,并且您想檢查物件中的所有屬性是否具有值。如是,
試試這個:
let arr = [{
a:12,
b:14,
c:undefined,
d:undefined,
e:56,
f:"file 1",
g:"file 2",
h:undefined
}];
arr.forEach(obj => {
let str = '';
Object.keys(obj).forEach(key => {
str = obj[key] ? 'code works' : 'fails'
})
console.log(str);
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/468978.html
上一篇:結合更多的IF(或谷歌表格公式
