Javascript 循环遍历项目数组的更好方法
我有一个模型,如下所示Javascript 循环遍历项目数组的更好方法,javascript,arrays,typescript,Javascript,Arrays,Typescript,我有一个模型,如下所示 this.Model Model {class: undefined items: Array(0) tag: undefined launch: undefined length: undefined name: undefined Id: "de4d704a-b754-4546-b3ab-f0c131eba84a" time: "15:36" tonnage: undefined} 模型中唯一始终具有值的对象是Id和时间 我
this.Model
Model {class: undefined items: Array(0) tag: undefined launch: undefined length: undefined name: undefined Id: "de4d704a-b754-4546-b3ab-f0c131eba84a" time: "15:36" tonnage: undefined}
模型中唯一始终具有值的对象是Id和时间
我有一个if语句,它通过我的每个对象检查它是否为null,如下所示:
if ( this.Model.class == null && this.Model.name == null && this.Model.tag== null && this.Model.launch == null && this.Model.length == null && this.Model.tonnage == null && this.Model.items.length == 0)
{
//does something in here
}
因此,我想检查除时间和ID之外的所有对象是否都为null,有没有比在if语句中使用上述方法更好的方法呢?在这种情况下,您有两个选项:
我将创建一个函数,使用
Object.entries
和Array.every
检查这一点
此解决方案的优点:
- 可重用的实用功能
- 使用任意数量的要忽略的关键点
- 如果指定要忽略的键不是所提供对象的一部分,则函数的键入将引发错误
Javascript中的代码片段
函数checkAllKeysExceptGivenKeysToBeNullable(obj,键){
返回Object.entries(obj).every(([
钥匙
价值
]) => {
//如果必须忽略该键
if(键。包括(键)){
返回true;
}
//检查该值是否可为空
返回值===null||
值===void 0||
(数组的值实例&&value.length==0);
});
}
console.log(checkAllKeysExceptGivenKeysToBeNullable({
类别:未定义,
项目:数组(0),
标签:未定义,
发射:未定义,
长度:未定义,
名称:未定义,
Id:'de4d704a-b754-4546-b3ab-f0c131eba84a',
时间:15:36,
吨位:未定义,
}, [
“Id”,
“时间”,
]));
console.log(checkAllKeysExceptGivenKeysToBeNullable({
类别:未定义,
项目:数组(0),
标签:'不',
发射:未定义,
长度:未定义,
名称:未定义,
Id:'de4d704a-b754-4546-b3ab-f0c131eba84a',
时间:15:36,
吨位:未定义,
}, [
“Id”,
“时间”,
]));代码>在玩了一会儿之后,我用Object.keys()想出了一个解决方案。
如果除ID和时间外的所有属性都为空,则返回true。通常,提供答案而不是重定向到链接会很有用。如果您认为此问题与现有问题重复,您可以随时使用注释通知。我有一个简短的问题,因为我有一个存储值的“this.model”。调用this.checkAllExceptGivenKeyTobeNullable()函数时。如何将此.model实例传递给它?示例:在model
是类A的属性的情况下。如果将checkAllExceptGivenKeysToBeNullable
放入A中,可以将其称为this.checkAllExceptGivenKeysToBeNullable(this.model,['Id','time'])
Example:在model是类A的属性的情况下。如果将checkAllExceptGivenKeysToBeNullable作为静态方法放入名为B的实用程序类中,则可以将其称为B.checkAllExceptGivenKeysToBeNullable(this.model,['Id','time'])
function checkProperties(obj) {
for (var key in obj) {
if (obj[key] !== null && obj[key] != "")
return false;
}
return true;
}
var obj = {
x: null,
y: "",
z: 1
}
checkProperties(obj) //returns false
let report = {
property1: null,
property2: null,
}
let result = !Object.values(report).every(o => o === null);
console.log(result);
/**
* Checks if all of the objects values are null, except for keys in param except
* @param obj: The object to test
* @param except (optional): keys to omit the null check on
*/
function checkIfPropertiesNull(obj: {[key: string]: unknown}, except: string[] = []): boolean {
const keys = Object.keys(obj).filter(key => !except.includes(key));
for(const key of keys){
if(obj[key] !== null){
return false;
}
}
return true;
}
console.log(checkIfPropertiesNull({ id: 1, name: 'mike', city: null }, ['id', 'name'])); // true, because id and name are not checked
console.log(checkIfPropertiesNull({ id: 1, name: 'mike', city: 'Munich' }, ['id', 'name'])); // false, city isn't null
for (let prop in Modal) {
if (Modal.prop != time && Modal.prop != id && Modal[prop] != null) {
return false
}
}
return true